Python网络爬虫往往需要连续运行很长时间。期间,运行过程中会随时输出一些状态信息,供分析查看。在此过程中,有时会选择所需信息,然后习惯性地点击Ctrl+C进行复制操作,啊哦~~~~ 不妙!对于运行中的Python来说,这也会导致发出退出运行的信号。于是我们就看到如下的画面:
KeyboardInterrupt异常!怎么办?如果不想因为一个粗心大意的按键而导致程序中途退出,势必需要对退出信号进行处理,设置退出信号SIGINT的处理函数。具体代码如下:
import time
import signal
def signal_handler(signal,frame):
print('You pressed Ctrl+C!')
signal.signal(signal.SIGINT,signal_handler)
print('Press Ctrl+C')
for x in range(1,100):
time.sleep(2)
print(x)
现在,即使我们随意反复点击Ctrl+C,也不会导致程序意外退出了。另外,点击Ctrl+\ 程序也不会再退出了。如图:
当然,在有些时候,当我们点击Ctrl+C时,还是希望程序能中断运行,但我们不想看到Traceback那种不友好的信息,而是希望程序能比较优雅地停下来。这时,不妨在退出信号SIGINT处理函数中,添加一句:sys.exit(0)就可以了。现在代码和运行情况如下:
import time
import signal
import sys
def signal_handler(signal,frame):
print('You pressed Ctrl+C!')
sys.exit(0)
signal.signal(signal.SIGINT,signal_handler)
print('Press Ctrl+C')
for x in range(1,100):
time.sleep(2)
print(x)