如何忽略Python中的一个特殊异常?

如何忽略Python中的一个特殊异常?,python,exception,Python,Exception,我的代码中有一个try块大小写,我想忽略一个特殊的异常,其余的都应该被引发 例如: try: blah except <exception> as e: raise Exception(e) 试试看: 废话 除e以外: 引发异常(e) 在这种情况下,我希望引发除一个例外的所有异常,比如说,如果异常为“querynotfound”,我必须忽略它 我如何忽略这一个例外 我可以使用多个块,但如何定义异常?您可以给出如下内容: try: print(x) except NameE

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

例如:

try:
 blah
except <exception> as e:
 raise Exception(e)
试试看:
废话
除e以外:
引发异常(e)
在这种情况下,我希望引发除一个例外的所有异常,比如说,如果异常为“querynotfound”,我必须忽略它

我如何忽略这一个例外


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

您可以给出如下内容:

try:
  print(x)
except NameError:
  print("Variable x is not defined")
except:
  print("Something else went wrong")
在这种情况下,您希望捕获NameError并指定一条消息。对于所有其他消息,您希望指定另一条消息

假设您想忽略NameError,那么您可以只给
continue
pass

或者,也可以引发异常

例如:

x = -1

if x < 0:
  raise Exception("Sorry, no numbers below zero")
x=-1
如果x<0:
引发异常(“对不起,没有低于零的数字”)
所以你可以结合所有这些来得到你想要的

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

关于堆栈溢出(如Gino突出显示的),请参见

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

from contextlib import suppress

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

在这种情况下,块仍然在raise VALUERROR时存在,但不会引发异常。

您可以添加多个,但clauseIt的排序与之相反。捕捉那个特定的异常并重新提出所有其他异常。你能澄清一下你在挣扎什么吗?您已经显示了处理(并因此忽略)特定异常的代码。你说的“我想提出所有例外情况”是什么意思?在处理异常时,它们已经被提出——不处理它们意味着它们将继续。是否要将它们作为不同的异常重新引发?“我可以使用多个except块,但如何定义异常?”请澄清要忽略的异常。什么用逻辑术语定义“例外”?例如,仅仅是
keyrerror
,而不是
LookupError
?特定的
键错误
值,即带有特定的
e.args
?一个特定的
KeyError
实例,即通过identity标识?对于所有其他实例,我认为OP希望重新引发,因此可能会采用裸
raise
来代替。