Treat `KeyboardInterrupt` or `SystemExit` the same on program exit even if they are inside exception groups
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
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.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Empieza con _Py_HandleSystemExitAndKeyboardInterrupt de CPython, que el issue identifica como el punto de entrada relevante, y reproduce los dos ejemplos de códigos de salida con un script que lanza una excepción simple y otro dentro de un BaseExceptionGroup. Lee la discusión enlazada antes de decidir cómo debe tratarse la salida de SystemExit; estará terminado cuando KeyboardInterrupt y SystemExit agrupados sigan el comportamiento de salida independiente previsto.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- operating-systems
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 45/100