当前位置: 首页 > 面试题库 >

如何在嵌套的try / except块中重新引发异常?

公良弘毅
2023-03-14
问题内容

我知道,如果我想重新引发异常,我会raise在相应的except块中简单地使用没有参数的方法。但是给定一个嵌套的表达式

try:
    something()
except SomeError as e:
    try:
        plan_B()
    except AlsoFailsError:
        raise e  # I'd like to raise the SomeError as if plan_B()
                 # didn't raise the AlsoFailsError

如何在SomeError不破坏堆栈跟踪的情况下重新筹集?raise在这种情况下,仅此一项会重新提高最近的筹码AlsoFailsError。还是我应该重构代码来避免此问题?


问题答案:

从Python 3开始,回溯存储在异常中,因此raise e(大多数)正确的事情很简单:

try:
    something()
except SomeError as e:
    try:
        plan_B()
    except AlsoFailsError:
        raise e  # or raise e from None - see below

产生的追溯将包括SomeError在处理过程中发生的其他通知AlsoFailsError(由于位于raise e内部except AlsoFailsError)。这具有误导性,因为实际发生的是相反的情况-
我们AlsoFailsError在尝试从恢复时遇到并处理了它SomeError。要获取不包含的回溯AlsoFailsError,请替换raise eraise e from None

在Python
2中,您将异常类型,值和回溯存储在局部变量中,并使用以下三种参数形式raise

try:
    something()
except SomeError:
    t, v, tb = sys.exc_info()
    try:
        plan_B()
    except AlsoFailsError:
        raise t, v, tb


 类似资料:
  • 本文向大家介绍django中嵌套的try-except实例,包括了django中嵌套的try-except实例的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,大家还是直接看代码吧! 感觉上面这段代码,应用的技术点蛮多的,作个记录。 包括其node port的管理思想,提取技巧。 orm的列表扁平化,列表交集,批量删除 补充知识:Django 在异常捕获中进行数据库保存,保存后将异常再抛

  • 本文向大家介绍Java异常处理中的嵌套try块,包括了Java异常处理中的嵌套try块的使用技巧和注意事项,需要的朋友参考一下 顾名思义,try块中的try块在Java中称为嵌套try块。当不同的块(例如外部和内部)可能导致不同的错误时,就需要这样做。要处理它们,我们需要嵌套的try块。 现在让我们看一个实现嵌套try块的示例- 示例 输出结果 现在我们将在上面的示例中进行一些更改- 示例 输出结

  • 我们尝试读取用户的一段输入。按Ctrl-d,看一下会发生什么。 >>> s = raw_input('Enter something --> ') Enter something --> Traceback (most recent call last):   File "<stdin>", line 1, in ? EOFError Python引发了一个称为EOFError的错误,这个错误基本

  • 问题内容: 我正在编写自己的容器,该容器需要通过属性调用来访问内部的字典。容器的典型用法如下: 我知道写这样的东西可能很愚蠢,但这就是我需要提供的功能。我正在考虑通过以下方式实现此目的: 我不确定嵌套的try / except块是否是一个好习惯,所以另一种方法是使用and : 或者使用其中之一,然后尝试使用catch块,如下所示: 哪个选项最适合pythonic和优雅? 问题答案: 您的第一个例子

  • 问题内容: 如何在try / except块内将变量设为公共? 此代码返回错误 NameError:名称“文本”未定义 如何在try / except块之外使变量文本可用? 问题答案: 语句不会创建新的作用域,但是如果调用引发异常,则不会设置该语句。您可能希望在子句中使用该行,以便仅在没有异常的情况下才执行该行。 如果以后需要使用,您真的需要考虑如果分配失败并且您无法致电,其值应该是什么。您可以在

  • 考虑来自Java文档的以下代码。 根据Java文档, 在示例readFirstLineFromFile中,如果从try块和try with resources语句抛出异常,则方法readFirstLineFromFile抛出从try块抛出的异常;禁止从try with resources块引发的异常。 另一方面,也提到了 由于BufferedReader实例是在try with resource语