- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以向我解释以下内容吗?让我们看一下代码:
if __name__ == '__main__':
try:
while 1:
x = 2+2
except KeyboardInterrupt:
print('yo')
如果我运行这个,等一会儿,然后按Ctrl+C,一个异常将被处理并且消息yo
将打印出来。
如果我们更改代码以捕获像这样的广泛异常:
if __name__ == '__main__':
try:
while 1:
x = 2+2
except Exception, e:
print('yo')
print(e)
运行它,稍等片刻,按Ctrl+C,不会捕获到KeyboardInterrupt异常。
根据 Python documentation :
Python installs a small number of signal handlers by default: SIGPIPE is ignored (so write errors on pipes and sockets can be reported as ordinary Python exceptions) and SIGINT is translated into a KeyboardInterrupt exception. All of these can be overridden.
那么,为什么在第二种情况下没有捕获甚至引发此异常?
最佳答案
您不能通过捕获 Exception
来捕获 KeyboardInterrupt
因为前者继承自 BaseException
仅有的。您可以在 docs 中阅读相关信息:
exception
KeyboardInterrupt
Raised when the user hits the interrupt key (normally Control-C or Delete). During execution, a check for interrupts is made regularly. Interrupts typed when a built-in function
input()
orraw_input()
is waiting for input also raise this exception. The exception inherits fromBaseException
so as to not be accidentally caught by code that catchesException
and thus prevent the interpreter from exiting. (Emphasis mine)
这意味着您必须:
except BaseException, e:
但这被认为是一种不好的做法。最好像您的第一个示例一样捕获 KeyboardInterrupt
本身。
关于python - KeyboardInterrupt 不会在广泛异常的情况下引发或捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23915740/
代码如下: try: input() # I hit Ctrl+C except Exception as e: print(str(e)) 这是回溯: Traceback (most
我使用这段代码来中断函数执行,而没有任何错误回溯。 if __name__ == "__main__": try: main() except KeyboardInte
有人可以向我解释以下内容吗?让我们看一下代码: if __name__ == '__main__': try: while 1: x = 2+2
在下面的简单示例中,我用函数 foo() 做了一些事情。函数内部有一个变量a。我想做的是当程序捕捉到 KeyboardInterrupt 时,可以打印局部函数变量 a。 很明显,下面的方法是行不通的。
Cont = 1 while Cont == 1: try: while Cont == 1: counter = counter + 0.1
我有一个循环,在每次迭代中我(重新)计算一个长值向量: try: while(1): long_vec = recalculate( long_vec ) la
我目前正在使用 Twisted 在回调中的 for 循环中重复一项任务,但是如果用户通过 Ctrl-C 发出 KeyboardInterrupt,我希望 react 器在回调(一个)中中断循环。根据我
我有以下代码: while True: try: #DoSomething except KeyboardInterrupt: break 但是我不想使
我希望向我的代码添加功能,这样如果我想在任何时候终止代码,它都会安全地终止训练并保存变量。虽然我已经尝试寻找更好的解决方案,但我想捕获一个 KeyboardInterrupt异常(exception)
我有一个代码,可用于在 Ctrl+C 时停止。我想在我按 Ctrl+C 后做一些事情。因此我写: try: work() except KeyboardInterrupt: do_ot
我一直在搞一个 Django 项目。我想要实现的是 Django 项目在另一个进程中启动,而父进程启动我编写的任意代码加载(我的项目的后端)。显然,Django 进程和父进程进行通信。我希望进程可以读
我在编写启动本地 JBoss 实例的脚本时遇到了一个奇怪的问题。 我的代码看起来像这样: with open("/var/run/jboss/jboss.pid", "wb") as f: p
我在 Windows 上执行了以下测试代码: import multiprocessing import time def child() : while True : time.slee
我正在使用 Python 调用使用子进程模块的 C++ 程序。由于该程序需要一些时间才能运行,我希望能够使用 Ctrl+C 终止它。我在 StackOverflow 上看到了一些与此相关的问题,但似乎
from socket import socket, AF_INET, SOCK_STREAM sock = socket(AF_INET, SOCK_STREAM) sock.bind(("loca
在 Linux 上将 Tkinter 与 Python 结合使用,我试图通过使用 KeyboardInterrupt 异常让 Ctrl+C 停止执行,但是当我按下它时有一段时间没有任何反应。最终它“接
不知何故,我的 pycharm 调试器不再连接。 我测试了所有 ENV。另外,在 stackoverflow 上阅读它:我删除了 .idea 目录。 然而,在重新启动pycharm .idea 后总是
我正在制作一个简单的多线程端口扫描器。它扫描主机上的所有端口并返回打开的端口。问题在于中断扫描。扫描完成需要很长时间,有时我希望在扫描过程中用 C-c 终止程序。问题是扫描不会停止。主线程锁定在 qu
我正在运行这个简单的代码: import threading, time class reqthread(threading.Thread): def run(self):
如何使用 fabric 触发 Ctrl+C,换句话说,是否可以通过 bash 手动触发 KeyboardInterrupt? 最佳答案 ctrl+c 生成 SIGINT 信号。 您可以使用 kill
我是一名优秀的程序员,十分优秀!