我有一些代码表示专有测试框架中的测试用例,如下所示:
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中的好习惯,还是有更好的方法吗?
编辑请注意,我确实尝试完全删除except
块,并且我没有明显的运行时问题,但是因为{{1我不清楚如果抛出异常它是如何工作的,或者这是否被Python社区认为是好的做法。
答案 0 :(得分:2)
删除except块,或者通过添加
来改进它except [Exception-Class]:
pass
其中[Exception-Class]是要例外的例外。这会增加一些糖,因为真正意想不到的错误不会被这个加入。 (或者将其添加为单独的:
except Exception, ex:
print "Unexpected error:", ex
答案 1 :(得分:1)
如果您不想在except
阻止中执行任何操作,则可以pass
。
try:
self.send_alarm_message()
except:
pass
finally:
self.teardown_some_test_data()
答案 2 :(得分:1)
是的,您可以完全删除except块,它是一个有效的python语法,只有try
和finally
。示例 -
In [58]: try:
....: print("Blah")
....: finally:
....: print("halB")
....:
Blah
halB
请注意,这不会捕获try
块内发生的任何异常/错误,我猜这就是你想要的。
我已经在很多地方看到过这种情况,我们正在创建一些需要清除的变量/资源,无论是否发生任何异常/错误,但我们不想在该特定位置处理任何异常。 / p>