Python异常 - 最后需要,除了之外不需要

时间:2015-07-17 09:20:28

标签: python exception-handling try-catch-finally try-finally

我有一些代码表示专有测试框架中的测试用例,如下所示:

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社区认为是好的做法。

3 个答案:

答案 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语法,只有tryfinally。示例 -

In [58]: try:
   ....:     print("Blah")
   ....: finally:
   ....:     print("halB")
   ....:
Blah
halB

请注意,这不会捕获try块内发生的任何异常/错误,我猜这就是你想要的。

我已经在很多地方看到过这种情况,我们正在创建一些需要清除的变量/资源,无论是否发生任何异常/错误,但我们不想在该特定位置处理任何异常。 / p>