【问题标题】:How to ignore one particular exception in Python?如何忽略 Python 中的一个特定异常?
【发布时间】:2021-04-26 17:20:18
【问题描述】:

我的代码中有一个 try 块大小写,我想忽略一个特定异常,其余的都应该被引发。

例如:

try:
 blah
except <exception> as e:
 raise Exception(e)

在这种情况下,我希望引发除一种情况之外的所有异常,比如如果异常是“未找到查询”,我必须忽略它。

如何忽略那个异常?

我可以使用多个 except 块但是如何定义异常?

【问题讨论】:

  • 可以添加多个except子句
  • 有点像Handling all but one exception 的反面。捕获该特定异常并重新raise所有其他异常。
  • 你能澄清一下你在挣扎什么吗?您已经展示了处理(并因此忽略)特定异常的代码。 “我希望引发所有异常”是什么意思?在处理异常时,它们已经被提出——不处理它们就意味着它们将继续。您想重新提出它们作为不同的例外吗?
  • "我可以使用多个 except 块但是如何定义异常?"请说明您要忽略的 what 异常。什么用逻辑术语定义“例外”?例如,只有KeyError 而不是LookupError?特定的KeyError ,即具有特定的e.args?一个特定的KeyErrorinstance,即通过身份标识?

标签: python exception


【解决方案1】:

你可以这样写:

try:
  print(x)
except NameError:
  print("Variable x is not defined")
except:
  print("Something else went wrong")

在这种情况下,您想要捕获 NameError 并指定一条消息。对于所有其他人,您要指定另一条消息。

假设你想忽略 NameError,那么你可以给 continuepass

或者,您也可以引发异常。

例如:

x = -1

if x < 0:
  raise Exception("Sorry, no numbers below zero")

因此,您可以结合使用所有这些来获得您想要的。

如果您想了解有关异常的更多详细信息,请参阅以下链接:

https://docs.python.org/3/tutorial/errors.html

https://www.w3schools.com/python/python_try_except.asp

https://realpython.com/python-exceptions/

在堆栈溢出时(如 Gino 突出显示的那样),请参阅 Handling all but one exception

【讨论】:

  • 对于所有其他人,我认为 OP 想要重新加注,所以可能是一个空的raise
【解决方案2】:

作为@Joe Ferndz 回答的替代方案,如果您不希望引发异常但仍希望块退出,您可以使用 contextlib 模块中的抑制:

from contextlib import suppress

with suppress(ValueError):
    print('hello world')
    raise ValueError
    print('this will not be printed')

在这种情况下,块仍然会在引发 ValueError 时退出,但不会引发异常。

【讨论】:

    猜你喜欢
    • 2020-03-05
    • 1970-01-01
    • 2015-05-13
    • 2011-07-06
    • 2016-04-05
    • 2012-03-03
    • 2018-12-12
    • 1970-01-01
    • 2016-11-01
    相关资源
    最近更新 更多