假设我正在做一些sql查询:
try:
some_cursor.execute(sql_query)
finally:
some_cursor.close()
与上面有什么不同吗:
some_cursor.execute(sql_query)
some_cursor.close()
它们看起来是等价的,因为没有异常处理。 我确实记得读过,如果
some_cursor.execute(sql_query)
有错误,那么在后面的关闭中光标可能无法正确关闭,但前一种情况的 finally
块可以确保这一点?
最重要(也许是明显)的区别是您不再捕获查询执行期间可能发生的异常。因此,如果
some_cursor.execute(sql_query)
失败,您将永远不会到达下一行(即光标不会关闭),因为程序将崩溃。虽然某些数据库库和 Python 数据库驱动程序可能会在程序退出时自动关闭资源,但不建议依赖此行为,因为它可能会导致资源泄漏和其他问题。 finally
包含“清理”命令,这将确保无论 try
块内发生什么情况,光标都会关闭。
请参阅 Python 文档 了解更多信息。