Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Improve performance of exception raise

Ouverte
#160,473 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
35/100
Type d'issue
Fonctionnalité
Clarté
Clairement spécifiée
Activité
À l'abandon
Stack technique
python
Domaine
backend, performance

Piste de recherche

The issue identifies _PyErr_SetObject() and _PyErr_SetRaisedException() as the relevant entry points; start by reading their implementations and the linked PR gh-160476. Compare the exception raising benchmarks described in the issue, including the free-threaded cases, and check whether the proposed direct call preserves the existing behavior. The linked PR indicates work is already underway.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

interpreter-core performance type-feature
Feature or enhancement

At the end of _PyErr_SetObject() the value is a normalized BaseException instance. The function still took a new reference to Py_TYPE(value) and fetched the value's traceback, only for _PyErr_Restore() to set that traceback back on the same object, store the value and drop the type again. Instead we can call _PyErr_SetRaisedException() directly.

Benchmarks

Default build, single thread:

Benchmark base patch
raise E / except E (heap type) 174 ns 171 ns: 1.02x faster
raise E('message') / except E 210 ns 205 ns: 1.02x faster
raise KeyError(1) / except KeyError (static type) 192 ns 176 ns: 1.09x faster
d[1] / except KeyError (raised from C) 177 ns 170 ns: 1.04x faster
f() / except E (raise through a frame) 290 ns 284 ns: 1.02x faster
Geometric mean (ref) 1.04x faster

The gain is within binary layout noise range, but in the right direction.

Free-threaded build, N threads each running try: raise E / except E: pass with E defined
by the main thread:

case 1 thr 2 thr 4 thr 8 thr
ctl: isinstance(b, A) 1.00 1.00 1.00 1.00
raise E / except E 1.03-1.04 1.12-1.15 1.34-1.44 1.60-1.70
Has this already been discussed elsewhere?

This is a minor feature, which does not need previous discussion elsewhere

Links to previous discussion of this feature:

No response

Linked PRs
  • gh-160476
Langage dominant
Python
Étoiles
77.7k
Forks
38.3k
Merge moyen
14 h 29 min
PR mergées (30 j)
699

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de python/cpython

Toutes les issues de python/cpython

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.