간단한 서버 프로그램을 작성 중입니다. 그것들은 피할 수없는 오타와 새로운 코드의 다른 에러가 될 것이고 보통 파이썬 인터프리터는 ValueError/AttributeError 역 추적을 출력하고 종료 할 것입니다. 역 추적은 오류의 정확한 위치를 가리킬 수 있습니다. 그러나 꼬인 프레임 워크에서는 이러한 오류가 인쇄되지 않습니다. 다음 예에서와 같이 : MyFactory.announce에서처리되지 않은 오류의 정확한 위치를 꼬인 모양으로 인쇄하는 방법
from twisted.internet import reactor, protocol, task
#from twisted.internet.defer import setDebugging
#setDebugging(True)
class MyProtocol(protocol.Protocol):
def dataReceived(self, data):
try:
set_position(int(data))
except ValueError:
pass
def connectionMade(self):
self.factory.clientConnectionMade(self)
def connectionLost(self, reason):
self.factory.clientConnectionLost(self)
class MyFactory(protocol.Factory):
protocol = MyProtocol
def __init__(self):
self.clients = []
self.lc = task.LoopingCall(self.announce)
self.lc.start(1)
def announce(self):
pos = A_GREAT_TYPO_HERE()
for client in self.clients:
client.transport.write("Posiiton is {0}\n".format(pos).encode('utf-8'))
def clientConnectionMade(self, client):
self.clients.append(client)
def clientConnectionLost(self, client):
self.clients.remove(client)
def get_position():
return position[0]
def set_position(pos):
position[0] = pos
def main():
global position
position = [0]
myfactory = MyFactory()
reactor.listenTCP(5362, myfactory)
reactor.run()
if __name__ == "__main__":
main()
A_GREAT_TYPO_HERE()
은 get_position()
하기위한 것입니다. 그러나 오타입니다.
그리고 서버가 실행될 때, 단자는
Unhandled error in Deferred:
와 아무것도를 출력합니다.
Unhandled error in Deferred:
(debug: C: Deferred was created:
C: File "nodes/test.py", line 48, in <module>
C: main()
C: File "nodes/test.py", line 43, in main
C: myfactory = MyFactory()
C: File "nodes/test.py", line 21, in __init__
C: self.lc.start(1)
C: File "/home/sgsdxzy/anaconda3/lib/python3.6/site-packages/twisted/internet/task.py", line 189, in start
C: deferred = self._deferred = defer.Deferred()
I: First Invoker was:
I: File "nodes/test.py", line 48, in <module>
I: main()
I: File "nodes/test.py", line 43, in main
I: myfactory = MyFactory()
I: File "nodes/test.py", line 21, in __init__
I: self.lc.start(1)
I: File "/home/sgsdxzy/anaconda3/lib/python3.6/site-packages/twisted/internet/task.py", line 194, in start
I: self()
I: File "/home/sgsdxzy/anaconda3/lib/python3.6/site-packages/twisted/internet/task.py", line 241, in __call__
I: d.addErrback(eb)
I: File "/home/sgsdxzy/anaconda3/lib/python3.6/site-packages/twisted/internet/defer.py", line 332, in addErrback
I: errbackKeywords=kw)
I: File "/home/sgsdxzy/anaconda3/lib/python3.6/site-packages/twisted/internet/defer.py", line 310, in addCallbacks
I: self._runCallbacks()
I: File "/home/sgsdxzy/anaconda3/lib/python3.6/site-packages/twisted/internet/defer.py", line 653, in _runCallbacks
I: current.result = callback(current.result, *args, **kw)
I: File "/home/sgsdxzy/anaconda3/lib/python3.6/site-packages/twisted/internet/task.py", line 236, in eb
I: d.errback(failure)
)
그것뿐만 self.lc.start(1)
에 가깝게 있지만 A_GREAT_TYPO_HERE()
오류 점수 나 연기 디버깅 가능하더라도, 단말에 출력 (제 2 및 제 3 행의 주석). 추적 프로그램이 실제 오류를 가리킬 수 있도록 내 프로그램을 어떻게 디버그 할 수 있습니까?
어떤 종류의 Twisted를 사용하고 있습니까? –
@ Jean-Paul Calderone 17.1.0이고 파이썬 버전은 3.6.1 – Light