Python 异常 - finally 需要,不需要 except
Python exception - need finally, don't need except
我有一些代码代表专有测试框架内的测试用例,看起来像这样:
def test_alarm(self):
self.setup_some_test_data()
try:
self.send_alarm_message()
except:
print "Unexpected error:", sys.exc_info()
finally:
self.teardown_some_test_data()
我被告知放弃打印,因为它不是必需的,并且测试框架在任何情况下都会捕获任何异常,这比在此处捕获它们更可取,但我仍然需要始终清除数据,因为在 finally
块中。
我是否完全删除 except
块?或者,我如何构造代码以有效地拥有一个空的 except
块并保留 finally
?这是 Python 中的良好做法还是有更好的方法?
Edit 请注意,我确实尝试过完全删除 except
块,但我没有明显的 运行-time 问题,尽管因为例外是在对 send_alarm_message()
的调用中不太可能,我不清楚如果抛出异常它将如何工作,或者这是否被 Python 社区认为是好的做法。
如果您不想在 except
块中做任何事情,那么您可以 pass
它。
try:
self.send_alarm_message()
except:
pass
finally:
self.teardown_some_test_data()
是的,您可以完全删除 except 块,只有 try
和 finally
是有效的 python 语法。例子-
In [58]: try:
....: print("Blah")
....: finally:
....: print("halB")
....:
Blah
halB
请注意,这不会捕获 try
块中出现的任何 Exceptions/Errors,我猜这就是您想要的。
我已经在很多地方看到过这种用法,我们正在创建一些 variables/resources,无论是否发生任何 exceptions/errors 都需要清除,但我们不想处理任何异常在那个特定的地方。
要么删除 except 块,要么通过添加
来改进它
except [Exception-Class]:
pass
其中[Exception-Class]是要排除的异常。这增加了一些糖分,因为真正意想不到的错误不会被它捕获。 (或者单独添加:
except Exception, ex:
print "Unexpected error:", ex
我有一些代码代表专有测试框架内的测试用例,看起来像这样:
def test_alarm(self):
self.setup_some_test_data()
try:
self.send_alarm_message()
except:
print "Unexpected error:", sys.exc_info()
finally:
self.teardown_some_test_data()
我被告知放弃打印,因为它不是必需的,并且测试框架在任何情况下都会捕获任何异常,这比在此处捕获它们更可取,但我仍然需要始终清除数据,因为在 finally
块中。
我是否完全删除 except
块?或者,我如何构造代码以有效地拥有一个空的 except
块并保留 finally
?这是 Python 中的良好做法还是有更好的方法?
Edit 请注意,我确实尝试过完全删除 except
块,但我没有明显的 运行-time 问题,尽管因为例外是在对 send_alarm_message()
的调用中不太可能,我不清楚如果抛出异常它将如何工作,或者这是否被 Python 社区认为是好的做法。
如果您不想在 except
块中做任何事情,那么您可以 pass
它。
try:
self.send_alarm_message()
except:
pass
finally:
self.teardown_some_test_data()
是的,您可以完全删除 except 块,只有 try
和 finally
是有效的 python 语法。例子-
In [58]: try:
....: print("Blah")
....: finally:
....: print("halB")
....:
Blah
halB
请注意,这不会捕获 try
块中出现的任何 Exceptions/Errors,我猜这就是您想要的。
我已经在很多地方看到过这种用法,我们正在创建一些 variables/resources,无论是否发生任何 exceptions/errors 都需要清除,但我们不想处理任何异常在那个特定的地方。
要么删除 except 块,要么通过添加
来改进它except [Exception-Class]:
pass
其中[Exception-Class]是要排除的异常。这增加了一些糖分,因为真正意想不到的错误不会被它捕获。 (或者单独添加:
except Exception, ex:
print "Unexpected error:", ex