Hi all. Is there any way to disable the default asynchronous exception raising SIGINT signal handling? Or a plan to add support for this? My searches on the net found several bug reports and discussions regarding this, but nothing seems final... :-( I believe the current Python default SIGINT handling by raising an asynchronous KeyboardInterrupt exception is dangerous, and can directly cause Python interpreter crashes even if no user code is involved, or any sort of other 'undefined behaviour' if it is. On Windows at least (using Python 3.3.3 at the moment, but seen with earlier versions as well), I occasionally get 'python.exe has stopped working' dialogs when Ctrl-C is pressed (most often if pressed during Python's initialization - loading site.py or earlier). The problem with asynchronous exceptions is, of course, that they can occur at _any_ time, even at the start of a finally: block, effectively causing cleanup code to be skipped even though the programmer intended it to be called even in case of exceptions. My scripts replace the default SIGINT/SIGBREAK signal handlers as soon as possible, and everything works great after that, but things get ugly if Ctrl-C is pressed before the script gets a chance to do this. I could even live with an 'exit with an ugly traceback', but having the process hang or fail so that Windows reports it as non-responding or reports it as 'stopped working' and offers to send failure information to Microsoft? That just leaves a bad taste in my mouth. :-( Also, Python documentation should not helpfully state or infer in several places that user can handle KeyboardInterrupt exceptions to implement Ctrl-C handling. Even if you do manage to catch it, you must never ever ignore it and must terminate your application since it might have already been left in an inconsistent state internally (e.g. some important finally clause got skipped, even one located deep in the Python standard library internals). Doing anything else can only be considered a partially working hack. Another problem is that that multiple SIGINT signals might occur in a sequence and any such KeyboardInterrupt handling can itself be interrupted in the same way as the original code. You can say that this is 'unlikely', or even add additional code to make this even more unlikely, but it still smells bad. :-( Hope this helps. Best regards, Jurko Gospodnetić Below, I've included a few script outputs (tracebacks included) from instances where Python interpreter crashed due to pressing Ctrl-C soon after an empty Python script has been run. In the first of these instances I got the Microsoft's error reporting dialog. In all the later instances I checked the Python process's debug output and every time it included the message: 'Microsoft Visual Studio C Runtime Library has detected a fatal error in python.exe.'. Using: - OS: Windows 7 SP1 x64 - Python 3.3.3 (64-it) - default site.py -------------- Occurrence #1: --------------
D:\Workplace>run.py Fatal Python error: Py_Initialize: can't initialize sys standard streams Traceback (most recent call last): File "<frozen importlib._bootstrap>", line 755, in _open_registry FileNotFoundError: [WinError 2] The system cannot find the file specified
During handling of the above exception, another exception occurred:
Traceback (most recent call last): File "C:\Program Files\Python\Python333\lib\encodings\__init__.py", line 98, in search_function level=0) File "<frozen importlib._bootstrap>", line 1565, in _find_and_load File "<frozen importlib._bootstrap>", line 1523, in_find_and_load_unlocked File "<frozen importlib._bootstrap>", line 1477, in _find_module File "<frozen importlib._bootstrap>", line 777, in find_module File "<frozen importlib._bootstrap>", line 768, in _search_registry File "<frozen importlib._bootstrap>", line 755, in _open_registry KeyboardInterrupt
-------------- Occurrence #2: --------------
D:\Workplace>run.py Fatal Python error: Py_Initialize: can't initialize sys standard streams Traceback (most recent call last): File "C:\Program Files\Python\Python333\lib\codecs.py", line 165, in __init__ def __init__(self, errors='strict'): KeyboardInterrupt
-------------- Occurrence #3: --------------
D:\Workplace>run.py Fatal Python error: Py_Initialize: can't initialize sys standard streams Traceback (most recent call last): File "<frozen importlib._bootstrap>", line 1565, in _find_and_load File "<frozen importlib._bootstrap>", line 1523, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 1477, in _find_module File "<frozen importlib._bootstrap>", line 1309, in find_module File "<frozen importlib._bootstrap>", line 1288, in _get_loader File "<frozen importlib._bootstrap>", line 1387, in find_loader File "<frozen importlib._bootstrap>", line 110, in _path_isfile File "<frozen importlib._bootstrap>", line 101, in _path_is_mode_type KeyboardInterrupt
-------------- Occurrence #4: --------------
D:\Workplace>run.py Fatal Python error: Py_Initialize: can't initialize sys standard streams Traceback (most recent call last): File "C:\Program Files\Python\Python333\lib\io.py", line 52, in <module> import abc File "<frozen importlib._bootstrap>", line 1565, in _find_and_load File "<frozen importlib._bootstrap>", line 1533, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 486, in _verbose_message KeyboardInterrupt
-------------- Occurrence #5: --------------
D:\Workplace>run.py Fatal Python error: Py_Initialize: can't initialize sys standard streams Traceback (most recent call last): File "C:\Program Files\Python\Python333\lib\io.py", line 52, in <module> import abc File "C:\Program Files\Python\Python333\lib\abc.py", line 6, in <module> from _weakrefset import WeakSet File "<frozen importlib._bootstrap>", line 1559, in _find_and_load KeyboardInterrupt
-------------- Occurrence #6: --------------
D:\Workplace>run.py Fatal Python error: Py_Initialize: can't initialize sys standard streams Traceback (most recent call last): File "C:\Program Files\Python\Python333\lib\encodings\__init__.py", line 69, in search_function def search_function(encoding): KeyboardInterrupt
-------------- Occurrence #7: --------------
D:\Workplace>run.py Fatal Python error: Py_Initialize: can't initialize sys standard streams Traceback (most recent call last): File "C:\Program Files\Python\Python333\lib\io.py", line 52, in <module> import abc File "C:\Program Files\Python\Python333\lib\abc.py", line 6, in <module> from _weakrefset import WeakSet File "<frozen importlib._bootstrap>", line 1565, in _find_and_load File "<frozen importlib._bootstrap>", line 1532, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 584, in _check_name_wrapper File "<frozen importlib._bootstrap>", line 1022, in load_module File "<frozen importlib._bootstrap>", line 1003, in load_module KeyboardInterrupt
-------------- Occurrence #8: --------------
D:\Workplace>run.py Fatal Python error: Py_Initialize: can't initialize sys standard streams Traceback (most recent call last): File "C:\Program Files\Python\Python333\lib\encodings\__init__.py", line 98, in search_function level=0) File "<frozen importlib._bootstrap>", line 1565, in _find_and_load File "<frozen importlib._bootstrap>", line 1532, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 584, in _check_name_wrapper File "<frozen importlib._bootstrap>", line 1022, in load_module File "<frozen importlib._bootstrap>", line 1003, in load_module File "<frozen importlib._bootstrap>", line 560, in module_for_loader_wrapper File "<frozen importlib._bootstrap>", line 857, in _load_module File "<frozen importlib._bootstrap>", line 439, in cache_from_source KeyboardInterrupt
-------------- Occurrence #9: --------------
D:\Workplace>run.py Fatal Python error: Py_Initialize: can't initialize sys standard streams Traceback (most recent call last): File "C:\Program Files\Python\Python333\lib\encodings\__init__.py", line 98, in search_function level=0) File "C:\Program Files\Python\Python333\lib\encodings\cp852.py", line 175, in <module> 0x00ff: 0x00a0, # NO-BREAK SPACE KeyboardInterrupt