Python 扭曲的、延迟的完全回溯

Python 扭曲的、延迟的完全回溯,python,twisted,deferred,Python,Twisted,Deferred,我只是在学习在Twisted上编写应用程序,所以犯了很多错误 假设有一个代码: d = defer.Deferred() d.addCallback(self.start_app) #d.addErrback(self.command_die) d.callback(0) def start_app(self, d): #import os return os.startfile(self.path) def command_die(self, d): print (

我只是在学习在Twisted上编写应用程序,所以犯了很多错误

假设有一个代码:

d = defer.Deferred()
d.addCallback(self.start_app)
#d.addErrback(self.command_die)
d.callback(0)

def start_app(self, d):
    #import os
    return os.startfile(self.path)

def command_die(self, d):
    print ('com_die', d)
我们在os.startfile(self.path)和大回溯中有错误:

Unhandled error in Deferred:
Unhandled Error
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\twisted\internet\defer.py", line 542, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "C:/Dropbox/my_py/client3.py", line 100, in command_analiz
    d.callback(i)
  File "C:\Python27\lib\site-packages\twisted\internet\defer.py", line 361, in callback
    self._startRunCallbacks(result)
  File "C:\Python27\lib\site-packages\twisted\internet\defer.py", line 455, in _startRunCallbacks
    self._runCallbacks()
--- <exception caught here> ---
  File "C:\Python27\lib\site-packages\twisted\internet\defer.py", line 542, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "C:/Dropbox/my_py/client3.py", line 353, in start_eve_d
    return os.startfile(self.path)
exceptions.NameError: global name 'os' is not defined
延迟中未处理的错误: 未处理错误 回溯(最近一次呼叫最后一次): 文件“C:\Python27\lib\site packages\twisted\internet\defer.py”,第542行,在运行回调中 current.result=回调(current.result,*args,**kw) 命令分析中第100行的文件“C:/Dropbox/my_py/client3.py” d、 回调(一) 回调中第361行的文件“C:\Python27\lib\site packages\twisted\internet\defer.py” 自启动返回(结果) 文件“C:\Python27\lib\site packages\twisted\internet\defer.py”,第455行,在startRunCallbacks中 self.\u runCallbacks() --- --- 文件“C:\Python27\lib\site packages\twisted\internet\defer.py”,第542行,在运行回调中 current.result=回调(current.result,*args,**kw) 文件“C:/Dropbox/my_py/client3.py”,第353行,在start\u eve\d中 返回os.startfile(self.path) exceptions.NameError:未定义全局名称“os” 如果我取消注释#d.addErrback(self.command_die)

我们几乎没有打印的“日志”:

('com_die',)
有没有办法在设计时获取完整的日志\回溯


现在我想知道哪里出现了新的错误,有必要对addErrorback的TwistedFailure对象进行注释。 要获得良好的回溯效果,请尝试使用printTraceback()方法:

>>> from twisted.internet.defer import Deferred as D
>>> def start_app(_):
...     #import os
...     return os.startfile('sasa')
... 
... def command_die(err):
...     err.printTraceback()
... 
...     
... d = D()
... d.addCallback(start_app)
... d.addErrback(command_die)
... d.callback(0)
Traceback (most recent call last):
  File "C:\Users\Pilyavskiy\AppData\Local\DreamPie\share\dreampie\subp-py2\dreampielib\subprocess\__init__.py", line 324, in execute
    exec codeob in self.locs
  File "<pyshell#3>", line 12, in <module>
    d.callback(0)
  File "C:\pill\Python27\lib\site-packages\twisted\internet\defer.py", line 361, in callback
    self._startRunCallbacks(result)
  File "C:\pill\Python27\lib\site-packages\twisted\internet\defer.py", line 455, in _startRunCallbacks
    self._runCallbacks()
--- <exception caught here> ---
  File "C:\pill\Python27\lib\site-packages\twisted\internet\defer.py", line 542, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "<pyshell#3>", line 3, in start_app
    return os.startfile('sasa')
exceptions.NameError: global name 'os' is not defined
>>从twisted.internet.defer导入延迟为D
>>>def启动应用程序(u):
...     #导入操作系统
...     返回os.startfile('sasa')
... 
... def命令(错误):
...     错误。打印回溯()
... 
...     
... d=d()
... d、 addCallback(启动应用程序)
... d、 加法器返回(命令_die)
... d、 回调(0)
回溯(最近一次呼叫最后一次):
文件“C:\Users\Pilyavskiy\AppData\Local\DreamPie\share\DreamPie\subp-py2\dreampielib\subprocess\\uuuuu init\uuuuu.py”,第324行,执行
self.locs中的exec codeob
文件“”,第12行,在
d、 回调(0)
文件“C:\pill\Python27\lib\site packages\twisted\internet\defer.py”,第361行,在回调中
自启动返回(结果)
文件“C:\pill\Python27\lib\site packages\twisted\internet\defer.py”,第455行,在startRunCallbacks中
self.\u runCallbacks()
---  ---
文件“C:\pill\Python27\lib\site packages\twisted\internet\defer.py”,第542行,在运行回调中
current.result=回调(current.result,*args,**kw)
启动应用程序中第3行的文件“”
返回os.startfile('sasa')
exceptions.NameError:未定义全局名称“os”
在源代码中寻找其他选项,它的评论非常好

PS:Named主要用于延迟本身,对于结果/错误最好使用res/err

>>> from twisted.internet.defer import Deferred as D
>>> def start_app(_):
...     #import os
...     return os.startfile('sasa')
... 
... def command_die(err):
...     err.printTraceback()
... 
...     
... d = D()
... d.addCallback(start_app)
... d.addErrback(command_die)
... d.callback(0)
Traceback (most recent call last):
  File "C:\Users\Pilyavskiy\AppData\Local\DreamPie\share\dreampie\subp-py2\dreampielib\subprocess\__init__.py", line 324, in execute
    exec codeob in self.locs
  File "<pyshell#3>", line 12, in <module>
    d.callback(0)
  File "C:\pill\Python27\lib\site-packages\twisted\internet\defer.py", line 361, in callback
    self._startRunCallbacks(result)
  File "C:\pill\Python27\lib\site-packages\twisted\internet\defer.py", line 455, in _startRunCallbacks
    self._runCallbacks()
--- <exception caught here> ---
  File "C:\pill\Python27\lib\site-packages\twisted\internet\defer.py", line 542, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "<pyshell#3>", line 3, in start_app
    return os.startfile('sasa')
exceptions.NameError: global name 'os' is not defined