Python 3.12 was published on October 2, 2023. As usual, the new version comes out in October after lots of effort by volunteers worldwide.
The new version comes with several new features and improvements that you’ll explore in this tutorial. You can also dive into the documentation to see a complete list of all changes.
In this tutorial, you’ll learn about new features and improvements, like:
- Better error messages with helpful suggestions and guidance
- More expressive f-strings that are backed by Python’s PEG parser
- Optimizations, including inlined comprehensions, for a faster Python
- A new syntax for type variables that you use to annotate generics
- Support for the powerful
perf
profiler on Linux
If you want to try any of the examples in this tutorial, then you’ll need to use Python 3.12. The tutorials Python 3 Installation & Setup Guide and How Can You Install a Pre-Release Version of Python? walk you through several options for adding a new version of Python to your system.
In addition to learning more about the new features coming to the language, you’ll also get some advice about what to consider before upgrading to the new version. Click the link below to download code examples demonstrating the new capabilities of Python 3.12:
Free Bonus: Click here to download your sample code for a sneak peek at Python 3.12, coming in October 2023.
Improved Error Messages
Python is usually recognized as a good beginner language, and it’s lauded for its readable syntax. One area where it’s become even more user-friendly lately is error messages.
In Python 3.10, many error messages—especially for syntax errors—got more informative and precise. Similarly, Python 3.11 added more information in tracebacks, making it more convenient to pinpoint offending code.
The latest version of Python continues the work of improving your developer experience by providing better error messages. In particular, several common error messages now come with helpful suggestions. In the rest of this section, you’ll explore the new and improved messages.
Several of the improvements relate to importing modules. In the next three examples, you try to work with π by importing pi
from math
. In each example, you’ll see one of the new suggestions in Python 3.12. Here’s the first one:
>>> math.pi
Traceback (most recent call last):
...
NameError: name 'math' is not defined. Did you forget to import 'math'?
When you use math
without importing it first, you’ll get a traditional NameError
. Additionally, the parser helpfully reminds you that you need to import math
before accessing it.
The reminder about remembering to import modules only triggers for standard library modules. For these error messages, Python 3.12 doesn’t track third-party packages that you’ve installed.
It’s possible to import specific names from a module using a from
–import
statement. If you happen to switch the order of the keywords, you’ll now get a friendly nudge towards the correct syntax:
>>> import pi from math
...
import pi from math
^^^^^^^^^^^^^^^^^^^
SyntaxError: Did you mean to use 'from ... import ...' instead?
Here, you tried to import pi
from math
, but Python needs you to reorder the statement and put from
before import
.
To see a third new error message, check out what happens if you import py
and not pi
from math
:
>>> from math import py
Traceback (most recent call last):
...
ImportError: cannot import name 'py' from 'math'. Did you mean: 'pi'?
There’s no py
name in math
, so you get an ImportError
. The parser suggests that you probably meant pi
instead of py
. Python 3.10 introduced a similar suggestion feature, where Python looks for similar names. What’s new in Python 3.12 is the ability to do this while importing.
In addition to these three improvements related to imports, there’s a final improvement concerning methods defined inside classes. Have a look at the following implementation of a Circle
class:
1# shapes.py
2
3from math import pi
4
5class Circle:
6 def __init__(self, radius):
7 self.radius = radius
8
9 def area(self):
10 return pi * radius**2
Note that you wrongly refer to radius
instead of self.radius
inside .area()
. This will cause an error when you call the method:
>>> from shapes import Circle
>>> Circle(5).area()
Traceback (most recent call last):
...
File "/home/realpython/shapes.py", line 10, in area
return pi * radius**2
^^^^^^
NameError: name 'radius' is not defined. Did you mean: 'self.radius'?
Read the full article at https://realpython.com/python312-new-features/ »
[ Improve Your Python With ? Python Tricks ? – Get a short & sweet Python Trick delivered to your inbox every couple of days. >> Click here to learn more and see examples ]
Find A Teacher Form:
https://docs.google.com/forms/d/1vREBnX5n262umf4wU5U2pyTwvk9O-JrAgblA-wH9GFQ/viewform?edit_requested=true#responses
Email:
public1989two@gmail.com
www.itsec.hk
www.itsec.vip
www.itseceu.uk
Leave a Reply