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

Python 2和3中捕获的异常实例的范围

萧霍英
2023-03-14
问题内容

由于在Python中,变量可以在其循环和try-except块之外访问,因此我天真地认为以下代码段可以正常工作,因为e可以访问:

try:
    int('s')
except ValueError as e:
    pass
print(e)

在Python 2(经过2.7测试)中,它确实按我的预期工作,并且输出为:

invalid literal for int() with base 10: 's'

但是,在Python 3中,我惊讶于输出为:

NameError: name 'e' is not defined

为什么是这样?


问题答案:

我后来发现一个答案,因为PEP 3110解释了在Python
3中,捕获的名称在except套件末尾被删除,以实现更有效的垃圾收集。如果您希望避免这种情况,还建议使用语法:

可以很容易地翻译出需要在except套件末尾附近保留异常实例的情况,就像这样

try:
    ...
except E as N:
    ...
...

变成

try:
    ...
except E as N:
    n = N
    ...
…

这样,当在块的末尾删除N时,n将保留并可以正常使用。



 类似资料:
  • export class SearchService { ... .map((response) => response.json()) .catch((e) => { if (e.status >== 500) { return cachedVersion(); new Error(`${ e.status

  • 本文向大家介绍php中try catch捕获异常实例详解,包括了php中try catch捕获异常实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php中try catch捕获异常。分享给大家供大家参考。具体方法分析如下: php中try catch可以帮助我们捕获程序代码的异常了,这样我们可以很好的处理一些不必要的错误了,感兴趣的朋友可以一起来看看。 PHP中try{}catch

  • 我正在尝试使用Quarkus构建一个小型REST服务。我正在使用Hibernate和PostgreSQL数据库。它在所有好的情况下都非常有效。但是当出现Hibernate异常时,比如,我无法以正常方式捕获它们。异常被包装为其他异常和。因此,可以通过使用 存储库 资源 由于这个问题,也无法为HibernateException添加一个。是否有人遇到过类似的问题,或者我的代码存在一般性问题?我正在使用

  • 问题内容: 我想知道其他SOer在实践中如何倾向于处理和/或防止异常。 您在什么情况下可以防止例外情况,以及如何防止例外情况?在什么情况下您会捕获异常? 通常,我通常会说“ NullPointerExceptions”(和其他类似的事件) 我发现在大多数情况下,这比使用try-catch块所涉及的所有事情要小。 当潜在异常更复杂或数量更多时,我使用try-catch块。 问题答案: 我认为,仅当引

  • 嘿StackOverflow社区, 关于抛出异常。一般什么时候抛出和异常,什么时候抓取? 假设我遇到了这样的情况,我不得不退出,因为发生了一些问题,我无法从它中恢复过来。我是投还是接? 我现在就这么做: 这样做对吗?如果我只是抛出异常会更合适吗?对不起,我是例外的新手:)

  • 本文向大家介绍C# WinForm捕获未处理的异常实例解析,包括了C# WinForm捕获未处理的异常实例解析的使用技巧和注意事项,需要的朋友参考一下 本文以一个完整的实例形式讲述了C# WinForm捕获未处理的异常的方法。分享给大家供大家参考之用。具体代码如下: 本文实例配有较为详尽的注释,便于大家阅读理解。希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍Python用Try语句捕获异常的实例方法,包括了Python用Try语句捕获异常的实例方法的使用技巧和注意事项,需要的朋友参考一下 python的异常,以及用try复合语句处理异常。 运行代码时有时会出现各种各样的错误,致使解析器中断执行,并提示xxxxxxErorr的提示,后面跟具体的错误的描述,这被称为是引发了异常。 其实异常告诉我们的是遇到了什么类型的错误。xxxxErorr

  • 问题内容: 如果我没记错的话,应该首先捕获Exception的子类。但是必须捕获任何RuntimeException和一个具体的经过检查的Exception,首先应该捕获它们吗? 这个命令正确吗?还是正确但错误的选择? 问题答案: 顺序是 先匹配的,然后执行 (正如JLS清楚地解释的)。 如果第一个catch匹配到异常,则执行,否则,将尝试下一个,并不断重复直到匹配或不匹配。 因此,在捕获异常时,