gpt4 book ai didi

Python 在抛出错误之前到达局部变量

转载 作者:行者123 更新时间:2023-11-29 21:00:24 25 4
gpt4 key购买 nike

我正在学习Python,终端先生说我在定义它之前引用了局部变量“data”(第 6 行)。

我不明白为什么在到达此变量之前没有抛出错误。

相关代码如下:

    def querySQL(query,value,tag):
try:
connection = mdb.connect(servername, username, password, dbname)
cursor = connection.cursor()
cursor.execute(query,value,tag)
data = cursor.fetchall()

except mdb.Error, e:
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)
return e.args[0]

finally:
if connection:
return data
connection.close()
else:
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)

最佳答案

可能在 execute 行中抛出异常,因为 connection 已定义,并且未定义对 cursor 的调用很可能会失败。由于finally block 总是被执行,即使出现异常,原始异常也会被UnboundLocalError隐藏。这就是为什么仅在 finally block 中包含清理代码很重要的原因。

def querySQL(query,value,tag):
try:
connection = mdb.connect(servername, username, password, dbname)
cursor = connection.cursor()
cursor.execute(query,value,tag)
data = cursor.fetchall()
except mdb.Error, e:
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)
finally:
if connection:
connection.close()
return data

您可能希望将 execute 的参数作为列表给出:

cursor.execute(query, [value, tag])

关于Python 在抛出错误之前到达局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37282599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com