扭曲:失败与错误

发布于 2024-09-13 22:05:29 字数 238 浏览 4 评论 0原文

我什么时候应该使用 twisted.python.failure.Failure,什么时候应该使用 twisted.internet.error.ConnectionDone 之类的东西?或者我应该这样做 twisted.python.failure.Failure(twisted.internet.error.ConnectionDone),如果是这样,在什么情况下我应该这样做?

When should I use a twisted.python.failure.Failure, and when should I use something like twisted.internet.error.ConnectionDone? Or should I do twisted.python.failure.Failure(twisted.internet.error.ConnectionDone), and if so, in what casese should I do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

删除会话 2024-09-20 22:05:30

Failure 表示异常和回溯(通常与当前堆栈跟踪不同)。当您构造异步异常时,您应该使用Failure。因此,当您要触发带有错误的 Deferred 时,或者当您要调用 IProtocol.connectionLostClientFactory.clientConnectionFailed 等方法时。这是因为在这种情况下,您希望能够将与当前堆栈跟踪不同的堆栈跟踪与异常相关联。

您不应使用 Failure(ConnectionDone),因为 Failure 的正确单参数调用接受异常实例,而不是异常类。因此,请改用 Failure(ConnectionDone())。您还可以使用零参数形式创建新的 FailureFailure()。这仅在存在“当前”异常时有效,例如在 except 语句套件中。它使用当前异常及其回溯构造Failure

您还可以构造一个包含三个参数的 Failure:异常类、实例和回溯。这通常是使用 sys.exc_info() 的返回值来完成的。

当您只想引发异常时,无需创建Failure。只需执行您通常在 Python 程序中执行的操作即可引发异常:raise SomeException(...)

A Failure represents an exception and a traceback (often different from the current stack trace). You should use Failure when you are constructing an asynchronous exception. So, when you're going to fire a Deferred with an error, or when you're going to call a method like IProtocol.connectionLost or ClientFactory.clientConnectionFailed. This is because in such cases, you want the ability to associate a different stack trace with the exception than the current stack trace.

You shouldn't use Failure(ConnectionDone) because the correct one-argument invocation of Failure accepts an exception instance, not an exception class. So, instead, use Failure(ConnectionDone()). You can also use the zero-argument form to create a new Failure: Failure(). This only works when there is a "current" exception, eg in the suite of an except statement. It constructs the Failure using that current exception, as well as its traceback.

You can also construct a Failure with three-arguments, an exception class, instance, and traceback. This is most commonly done using the return value of sys.exc_info().

When you just want to raise an exception, you don't need to create a Failure. Just do what you'd normally do in a Python program to raise an exception: raise SomeException(...).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文