Python 3.13 is a great release packed with features and improvements, but there is already an avalanche of articles that go throught the release notes. If you want a good run down, RealPython has a quality one, but there is little value for this blog to add on that.
So we are not going to speak about the new REPL, the no-GIL build, the experimental JIT, the deprecation thingy, the new typing goodies, or the better error messages (my fav, as usual).
Instead, I read the short book that they called changelog, and we are going to look at the things people didn't talk much about but piqued my interest.
You would expect that a 30-year-old language has paths and files nailed down, but it turns out you can always find room for improvement.
The shutil module providing high-level FS operations such as recursive delete or copy has seen such tweaks: many, many, bugs were fixed (particularly regarding error handling during recursion), and options were added (e.g.: to choose how to handle symlinks).
Shutil was notoriously so finicky I always hesitated to use it. Recursive descent often broke one way or another. This means I will attempt to put it back in my toolbox, as it’s very convenient when it works.