Python is my favourite programming language. Since I discovered it in 2004, programming in Python became my favourite hobby. I've tried to learn a few other languages and have never found one as friendly to beginners as Python. As readers of this blog know, these days I am particularly interested in tracebacks, and I am likely paying more attention than most to Python's improvements in this area: Python is becoming more and more precise in the information that it provides to the users when something goes wrong. For example, consider these 2 examples from Python 3.7
Given the message when we try to assign a value to None, we might have expected to see the same when trying to assign a value to the keyword "pass"; instead we get a not so useful "invalid syntax". Of course, if you've been reading this blog before, you won't be surprised that Friendly-traceback can provide a bit more useful information in this case.
However, this is not the point of this post... Let's see what kind of information Python 3.8 gives us for the first case.
As you can see, it is much more precise: this is a definite improvement.
Let's have a look at another case, using Python 3.8 again:
Again, the dreaded "invalid syntax". However, this has been significantly improve with the latest Python version, released yesterday.
Again, much better error messages which will be so much more useful for beginners that do not use Friendly-traceback [ even though they should! ;-) ]
There has been a few other similar improvements in the latest release ... but this one example should suffice to illustrate the work done to make Python even friendlier to beginners. However, this is unfortunately not the whole story.
To make Python useful to advanced users having to deal with large code base, Python has introduced "optional" type annotations. This is certainly something that the vast majority of professional programmers find useful - unlike hobbyists like me. Let me illustrate this by an example inspired from a Twitter post I saw today. First, I'll use Python 3.8:
If you know Python and are not actively using type annotations, you likely will not be surprised by the above. Now, what happens if we try to do the same thing with Python 3.9+
Unfortunately, Friendly-traceback cannot (yet!) provide any help with this.
EDIT: this might be even more confusing.
Eventually, I'll make use of the following to provide some potentially useful information.
Ideally, I would really, really like if it were possible to have truly "optional" type annotation, and a way to turn them off (and make their use generate an exception). Alas, I gather that this will never be the case, which I find most unfortunate.