我正在使用Windows(via this PDCurses)上的curses
模块,尝试打破KeyboardInterrupt
异常,但是按ctrl + c时不会引发异常。
一些简化的代码:
from curses import wrapper
items = ['a', 'very', 'long', 'list', 'of', 'strings']
def main(screen):
for item in items:
screen.addstr(0, 0, item)
screen.getch()
screen.refresh()
wrapper(main)
items
列表很长,现在我无法中途停止执行。我只需要反复按按键,直到结束。天堂禁止我在while True:
中尝试!当我按ctrl + c时,不会引发任何异常。它确实以
getch()
的形式传递给我的3
。是在getch
收到3
时手动提高SOP,还是有一种更适当的方法来避免吞下KeyboardInterrupt
? 最佳答案
默认情况下,curses
使用raw
模式,该模式可从文档中关闭中断/退出/挂起等功能。
在原始模式下,正常的行缓冲和中断,退出,
挂起,并关闭流控制键;字符是
呈现给诅咒输入功能一个接一个
从C的诅咒documentation:
这两个函数(raw
和cbreak
)之间的区别在于
控制字符(如暂停(CTRL-Z),中断和退出)的方式
(CTRL-C)传递给程序。在raw()
模式下,这些
字符直接传递给程序,而不会产生
信号。
由于python在发送KeyboardInterrupt
时会引发SIGINT
,因此可以预料到它不会被引发。您看到的3
确实表示一个中断。
由于这是C库处理的事情,因此无法避免这种“吞噬”异常。但是,您可以为getch
使用简单的包装器,以检查其何时返回3
并相应地引发错误。
关于python - 内部诅咒时如何提高KeyboardInterrupt,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21123146/