使用Ctrl+C停止python程序
我有一个用Python写的脚本,它使用了线程,并且发起了很多HTTP请求。我觉得发生的情况是,当一个HTTP请求(使用urllib2)在读取数据时,它会阻塞,这样就无法响应CtrlC来停止程序。有没有什么办法可以解决这个问题?
14 个回答
58
如果你在Python的命令行界面里运行程序,可以按 Ctrl + Z 来暂停它。否则,你需要找到正在运行的 python
进程,然后把它结束掉。
113
当你在运行一个Python程序时按下 Ctrl + c,Python会抛出一个叫做 KeyboardInterrupt
的异常。这通常发生在那些需要频繁发送HTTP请求的程序中,这类程序往往会有很多处理异常的代码。如果 try
-except
代码块中的 except
部分没有明确指定要捕获哪些异常,它就会捕获所有的异常,包括你刚刚引发的 KeyboardInterrupt
。一个写得好的Python程序会利用 Python的异常层次结构,只捕获那些从 Exception
派生的异常。
#This is the wrong way to do things
try:
#Some stuff might raise an IO exception
except:
#Code that ignores errors
#This is the right way to do things
try:
#Some stuff might raise an IO exception
except Exception:
#This won't catch KeyboardInterrupt
如果你无法更改代码(或者需要强制结束程序以使你的更改生效),你可以尝试快速按下 Ctrl + c。第一个 KeyboardInterrupt
异常会让你的程序跳出 try
块,希望后续的 KeyboardInterrupt
异常能在程序不再处于 try
块时被触发。
221
在Windows系统上,最简单有效的方法就是按下 CtrlBreak。这样可以立刻停止所有的Python脚本!
(注意,有些键盘上,“Break”这个键可能标记为“Pause”。)