如何在except子句中关闭数据库连接

时间:2011-02-24 17:51:09

标签: python

最初,我没有main()函数。我只有一大堆代码:

if __name__ == '__main__':

我正在尝试对代码进行一些重构,以便它更清洁,并且在代码引发异常的情况下进行清理。所以,现在我的代码看起来像这样:

if __name__ == '__main__':
    try:
        main()
    except :
        print "Unexpected error:", sys.exc_info()[0]
        engine.close()
        db.close()
问题是,引擎和数据库都是在main()中创建的,所以我实际上没有对它们的引用。有没有办法以这种方式处理异常,或者我是否必须在main()函数中更细化?

编辑: very helpful article about with statements

3 个答案:

答案 0 :(得分:5)

with statement与适当的上下文管理员或try ... finally一起使用,以确保您的连接已关闭。

答案 1 :(得分:2)

将您的异常处理放在main

答案 2 :(得分:0)

其他答案确实要好得多,但是可以也可以在Exception对象中传递数据,如果您自己引发它们或者捕获它们,修改它们并重新引发它们。

捕获和处理异常是一种更好的做法,以便main出来的异常真的非常特殊。