Se rendre au contenu

Python 3.11 est sorti

24 octobre 2022 par
Python 3.11 est sorti
Makersquad

Date de sortie : 24 octobre 2022

Documentation officielle : What’s New in Python 3.11

Python 3.11 est une bête de course. Le projet “Faster CPython” de Guido van Rossum porte ses fruits : 10-60% de gains de performance sans changer une ligne de code. Ajoutez les tracebacks qui pointent l’expression exacte, et vous avez une release majeure.


Les nouveautés principales

Performance : 10-60% plus rapide — sans effort

Python 3.11 est significativement plus rapide grâce au projet “Faster CPython” :

  • 25% plus rapide en moyenne sur les benchmarks standards
  • Démarrage 10-15% plus rapide
  • Interpréteur adaptatif spécialisé

Aucun changement de code nécessaire !


Tracebacks de rêve

Les tracebacks pointent maintenant l’expression exacte qui a planté :

Traceback (most recent call last):
  File "example.py", line 3, in <module>
    x['a']['b']['c']['d'] = 1
    ~~~~~~~~~~~^^^^^
TypeError: 'NoneType' object is not subscriptable


Exception groups et except*

Gérer plusieurs exceptions simultanées :

try:
    async with asyncio.TaskGroup() as tg:
        tg.create_task(task1())
        tg.create_task(task2())
except* ValueError as eg:
    for e in eg.exceptions:
        print(f"ValueError: {e}")
except* TypeError as eg:
    for e in eg.exceptions:
        print(f"TypeError: {e}")


Module tomllib — parser TOML natif

Lire des fichiers TOML sans dépendance externe :

import tomllib

with open("pyproject.toml", "rb") as f:
    config = tomllib.load(f)

print(config["project"]["name"])


Type Self pour les annotations

Annoter les méthodes qui retournent self :

from typing import Self

class Builder:
    def set_name(self, name: str) -> Self:
        self.name = name
        return self

    def clone(self) -> Self:
        return copy.copy(self)


asyncio.TaskGroup

Gérer des groupes de tâches avec annulation automatique :

async def main():
    async with asyncio.TaskGroup() as tg:
        task1 = tg.create_task(fetch_url(url1))
        task2 = tg.create_task(fetch_url(url2))
    # Les deux tâches sont terminées ici
    print(task1.result(), task2.result())


Notes sur les exceptions

Ajouter du contexte aux exceptions :

try:
    process(data)
except SomeError as e:
    e.add_note(f"Processing failed for user {user_id}")
    raise


Autres améliorations

  • LiteralString pour prévenir les injections
  • Required et NotRequired pour TypedDict
  • StrEnum pour les enums string
  • math.cbrt() — racine cubique
  • Regex : groupes atomiques et quantificateurs possessifs

Échanger avec un expert Python

Nous revenons vers vous sous 24h.


Chez Makersquad, nous mettons notre expertise Python au service de projets ambitieux et durables. Que ce soit pour le développement d’applications web, la conception d’API, l’automatisation de processus, la data ou l’optimisation de performances, nous accompagnons nos clients à chaque étape. Si vous avez un besoin en Python, un nouveau projet, une refonte, un audit: notre équipe est prête à vous aider à concevoir des solutions robustes, évolutives et maintenables.


À retenir

Python 3.11 est la mise à jour la plus excitante depuis longtemps. Les gains de performance sont réels et gratuits. Les exception groups permettent enfin de gérer proprement les erreurs concurrentes. Et tomllib natif, c’est juste pratique.

Django REST Framework 3.14 est sorti