Мой главный класс что-то вродеPython витой не ловить исключение
# file bmdaemon.py
from txjsonrpc.web import jsonrpc
from twisted.web import server, xmlrpc
from twisted.internet import reactor, defer, threads, task
import xmlrpclib
from txjsonrpc.web.jsonrpc import Proxy
class BMDaemon(jsonrpc.JSONRPC):
# class definition
class XmlRpcInterface(xmlrpc.XMLRPC):
# class definition
if __name__ == "__main__":
try:
bm_daemon = BMDaemon()
xml_interface = XmlRpcInterface()
portJSONRPC = bm_daemon.get_listeningJSON_port()
portXMLRPC = bm_daemon.get_listeningXML_port()
reactor.listenTCP(portJSONRPC, server.Site(bm_daemon))
reactor.listenTCP(portXMLRPC, server.Site(xml_interface))
reactor.run()
except KeyboardInterrupt:
print "MAIN: ^C received, exiting."
И я просто пытаюсь поймать CTRL+C
на внешнем уровне, то есть «основной» исполнения.
Однако отправка упомянутый клавиатуры прерывают просто печатает
<< prints from BMDaemon >>
^CUnhandled error in Deferred:
Unhandled Error
Traceback (most recent call last):
File "bmdaemon.py", line 562, in <module>
bm_daemon = BMDaemon()
File "bmdaemon.py", line 114, in __init__
<< some line >>
File "/usr/lib/python2.7/dist-packages/twisted/internet/task.py", line 170, in start
self()
File "/usr/lib/python2.7/dist-packages/twisted/internet/task.py", line 215, in __call__
d = defer.maybeDeferred(self.f, *self.a, **self.kw)
--- <exception caught here> ---
File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 134, in maybeDeferred
result = f(*args, **kw)
File "bmdaemon.py", line 519, in __registration
<< some line >>
File "/usr/lib/python2.7/commands.py", line 60, in getstatusoutput
text = pipe.read()
exceptions.KeyboardInterrupt:
<< prints from XmlRpcInterface >>
Другими словами, я не поймать запрашиваемую ошибку! Пожалуйста, будьте терпеливы, так как я пришел из среды Java, где такая ситуация была бы намного понятнее.
Может ли быть что-то в BMDaemon, есть обработчик исключений, которому присваивается приоритет, потому что он находится внутри класса? Я бы прокомментировал большую часть кода, чтобы отслеживать его, но я не слишком хорошо отлаживаю;). – Jblasco
Думаю, ты прав. Код на самом деле полон 'except Exception, e:', который маскирует все и останавливает желаемый поток. Благодарю. –