classification
Title: Ctrl C makes interpreter exit
Type: behavior Stage: resolved
Components: Library (Lib) Versions: Python 3.9
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: eryksun, terry.reedy, xxm
Priority: normal Keywords:

Created on 2021-03-24 03:04 by xxm, last changed 2021-06-06 20:07 by terry.reedy. This issue is now closed.

Messages (3)
msg389431 - (view) Author: Xinmeng Xia (xxm) Date: 2021-03-24 03:04
Python interpreter will exit when using Ctrl C to interrupt some Python module functions with read operations. e.g.  sndhdr.what(0), pdb.find_function('abs/'*100000,False), mimetypes.read_mime_types(0).  This is not the expected behavior.  Ctrl C is to raise a KeyboardInterrupt, it should not crash Python and make interpreter exit.

Reproduce:
1. type 'python3' in command console;
2. type 'import sndhdr;sndhdr.what(0)'
3. type ctrl C

Expected behavior:  type ctrl c, raise a KeyboardInterrupt,  Python does not exit.
========================================
xxm@xxm-System-Product-Name:~$ python
Python 3.9.2 (default, Mar 12 2021, 15:08:35)
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
KeyboardInterrupt
>>>
========================================

Unexpected behavior:  type ctrl c, raise a KeyboardInterrupt, Python exits.
===========================================================
xxm@xxm-System-Product-Name:~$ python
Python 3.9.2 (default, Mar 12 2021, 15:08:35)
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sndhdr;sndhdr.what(0)
^CTraceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/xxm/Desktop/apifuzz/Python-3.9.2/Lib/sndhdr.py", line 54, in what
    res = whathdr(filename)
  File "/home/xxm/Desktop/apifuzz/Python-3.9.2/Lib/sndhdr.py", line 61, in whathdr
    h = f.read(512)
KeyboardInterrupt
>>>

xxm@xxm-System-Product-Name:~$
===========================================================

System: Ubuntu 16.04
msg389435 - (view) Author: Eryk Sun (eryksun) * (Python triager) Date: 2021-03-24 03:38
> Python interpreter will exit when using Ctrl C to interrupt 
> some Python module functions with read operations. 

The REPL exits when stdin is closed. open() allows the filename to be an existing file descriptor without requiring a parameter such as "file_is_fd". So it's really simple to accidentally close stdin with something like `with open(0): pass`. The only role of Ctrl+C here is in canceling a blocking operation in the context such as a read(), after which the file is guaranteed to be closed by the context manager protocol.
msg395212 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2021-06-06 20:07
I verified that sndhdr.what(0) calls "with open(0, rb)" so that Eryk's comment applies.  (On Windows, handle 0 is invalid, so the call errors immediately instead of hanging.)
History
Date User Action Args
2021-06-06 20:07:15terry.reedysetstatus: open -> closed

nosy: + terry.reedy
messages: + msg395212

resolution: not a bug
stage: resolved
2021-03-24 03:38:42eryksunsettype: crash -> behavior

messages: + msg389435
nosy: + eryksun
2021-03-24 03:04:29xxmcreate