私はPython
を学習しています。ターミナル氏は、定義する前にローカル変数 "data"(行6)を参照していると言っています。エラーをスローする前にローカル変数に到達するPython
なぜこの変数に到達する前にエラーがスローされていないのかわかりません。 connection
がすでに定義されているため、
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)
それは 'データ= cursor.fetchallを()'到達する前に、それはエラーを投げています。エラーがスローされたとしても、 'finally' * always *が実行される、つまりその目的であるため、' finally'ブロックはまだ実行されます。 –
また、 'return data'の後に' connection.close() 'を置くことは、関数からすでに返っているので、実際には接続を閉じることはありません。 –
エラーメッセージの対象は、どの行ですか? – Jasper