Treat `KeyboardInterrupt` or `SystemExit` the same on program exit even if they are inside exception groups
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 77.2k
- Fork
- 35.9k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
Feature or enhancement
Proposal:
A KeyboardInterrupt or SystemExit inside a BaseExceptionGroup should be treated like a bare KeyboardInterrupt or SystemExit.
PS C:\...> python x.py
+ Exception Group Traceback (most recent call last):
| File "C:\...\x.py", line 1, in <module>
| raise BaseExceptionGroup("ki in an exception group", [KeyboardInterrupt()])
| BaseExceptionGroup: ki in an exception group (1 sub-exception)
+-+---------------- 1 ----------------
| KeyboardInterrupt
+------------------------------------
PS C:\...> $LastExitCode
1
PS C:\...> python x.py
Traceback (most recent call last):
File "C:\...\x.py", line 1, in <module>
raise KeyboardInterrupt()
KeyboardInterrupt
PS C:\...> $LastExitCode
-1073741510
Looking at the CPython source code, I believe _Py_HandleSystemExitAndKeyboardInterrupt is the relevant function.
Points for it:
- less pitfalls for a 3rd party using exception groups
- see any other failures (as exceptions) upon shutdown (ATM the workaround requires discarding the other exceptions)
Points against:
SystemExitin an exception group prints out the stack trace, unlike when it's not in an exception group- we could make them consistent (filter out
SystemExitand print the exception group then)
- we could make them consistent (filter out
I volunteer to implement this if this is fine.
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
EDIT: I have now made a post. See https://discuss.python.org/t/keyboardinterrupt-and-systemexit-in-exception-groups-should-be-considered-for-pythons-exit-code/82816
Links to previous discussion of this feature:
I have tried some basic keyword searches as well as some digging in blame, but I can't find any previous discussion.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia da _Py_HandleSystemExitAndKeyboardInterrupt di CPython, che l’issue identifica come il punto di ingresso rilevante, e riproduci i due esempi di codici di uscita con uno script che solleva un’eccezione semplice e uno all’interno di un BaseExceptionGroup. Leggi la discussione collegata prima di decidere come debba essere gestito l’output di SystemExit; il lavoro è completo quando KeyboardInterrupt e SystemExit raggruppati seguono il comportamento di uscita autonomo previsto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- operating-systems
- Tipo di issue
- Funzionalità
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 45/100