捕获asyncore类中的异常

时间:2014-05-12 21:46:40

标签: python exception-handling asyncore

我在python中实现了一个基于asyncore的IRC机器人,并且无法捕获asyncore-dispatched类的方法中出现的异常。这是我的最小例子:

#!/usr/bin/env python
import asyncore
import socket
import sys

class foo (asyncore.dispatcher):
    def __init__ (self, host, port):
        asyncore.dispatcher.__init__ (self)
        self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
        self.connect ((host, port))

def handle_exception(excType, excValue, trace):
    print "Blah! Exception!"
    quit()

sys.excepthook = handle_exception
foo ("127.0.0.1", 19991)
asyncore.loop()

尝试建立与127.0.0.1:19991的连接,但没有任何内容,因此会导致连接被拒绝错误并引发异常。这里的问题是sys.excepthook,它是handle_exception函数,似乎没有捕获它:

error: uncaptured python exception, closing channel <__main__.foo 127.0.0.1:19991 at
0x7fad23eaeab8> (<class 'socket.error'>:[Errno 111] Connection refused [/usr/lib/python2.7
/asyncore.py|read|83] [/usr/lib/python2.7/asyncore.py|handle_read_event|446] [/usr/lib/python2.7
/asyncore.py|handle_connect_event|454])

如果我在foo(&#34; 127.0.0.1&#34;,19991)之前调用了类似1/0的东西,则异常处理程序按预期工作。是否有可能使异常处理函数捕获异步类中发生的异常?如果是这样,怎么样?这是Python v2.7.6。

1 个答案:

答案 0 :(得分:4)

覆盖handle_error的{​​{1}}方法。