我应该何时使用twisted.python.failure.Failure
,何时应该使用twisted.internet.error.ConnectionDone
之类的内容?或者我应该twisted.python.failure.Failure(twisted.internet.error.ConnectionDone)
,如果是,我应该在什么情况下这样做?
答案 0 :(得分:9)
Failure
表示异常和回溯(通常与当前堆栈跟踪不同)。在构造异步异常时,应该使用Failure
。因此,当您要发送错误的Deferred
时,或者当您打算调用IProtocol.connectionLost
或ClientFactory.clientConnectionFailed
等方法时。这是因为在这种情况下,您希望能够将不同的堆栈跟踪与当前堆栈跟踪之外的异常相关联。
您不应该使用Failure(ConnectionDone)
,因为Failure
的正确单参数调用接受异常实例,而不是异常类。因此,请使用Failure(ConnectionDone())
。您还可以使用零参数表单创建新的Failure
:Failure()
。这仅在存在“当前”异常时才有效,例如在except
语句的套件中。它使用当前异常及其回溯来构造Failure
。
您还可以构造一个带有三个参数的Failure
,一个异常类,实例和回溯。这通常使用sys.exc_info()
的返回值来完成。
如果您只想提出异常,则无需创建Failure
。只需执行您在Python程序中通常执行的操作即可引发异常:raise SomeException(...)
。