仅含finally的try语句与直接执行SQL代码的差异疑问
两种游标执行代码的差异分析
先看你给出的两段代码:
代码1(带try-finally)
try: some_cursor.execute(sql_query) finally: some_cursor.close()
代码2(无异常处理)
some_cursor.execute(sql_query) some_cursor.close()
你的理解完全正确,两者的核心差异在于异常发生时游标资源的释放可靠性:
- 当
some_cursor.execute(sql_query)执行出错抛出异常时,代码2里的some_cursor.close()会被直接跳过,游标将处于未关闭状态,可能引发数据库连接资源泄漏,长期运行会占用过多数据库资源。 - 代码1中的
finally块具备「必执行」特性:不管try块内的代码是正常执行完成,还是抛出异常,finally里的some_cursor.close()都会被执行,确保游标一定会被关闭,避免资源泄漏问题。
额外补充:在Python中处理数据库游标/连接这类资源,更简洁可靠的方式是使用with上下文管理器,它会自动帮你完成资源的释放,无需手动调用close(),示例如下:
with some_connection.cursor() as some_cursor: some_cursor.execute(sql_query)
内容的提问来源于stack exchange,提问作者roulette01
相关产品推荐
相关产品推荐

