UnboundLocalError:局部变量‘error’在赋值前被引用
我看过其他关于这个错误的问题,但那些情况通常是因为某个地方变量没有被定义,所以在后面调用的时候就出错了。不过在我的程序里,我在尝试方法之前就定义了这些变量,并且在尝试方法中根据某些条件改变了它们,然后在后面的if语句中调用这些变量,但还是出错了。当Python执行到if语句并试图创建变量text时,它说变量error和error1没有定义(在赋值之前就被引用了)。
err = 0
error = 'No Error Set'
error1 = 'No Error1 Set'
try:
conn = sqlite3.connect(db_dir)
for row in conn.execute("select max(date) from eod"):
mxdate = row
if mxdate == None:
pass
else:
for row in conn.execute('select date, status from eod where date = ?',(mxdate,)):
_lst_eod = row
for row in conn.execute("select * from temp"):
_crnt_eod = row
conn.close()
except Exception as error:
error = str(error)
err = 1
logged = 0
try:
conn.close()
time = str(right_datetime())[11:19].replace(':','')
conn = sqlite3.connect(db_dir)
conn.execute("insert into error_log (date, user, auth, error, _action) values (?,?,?,?,'Failed to select from eod/temp tables.')",(int(str(_date)+time),cred[0],cred[1],error,))
conn.commit()
conn.close()
logged = 1
except Exception as error1:
error1 = str(error1)
if err == 1:
#An error occured here.
text = '##Error## An error occured while trying to end the day:\n'+error
if logged == 0:
text = text+'\n\nA row was written to the error log.'
else:
text = text+'\n\nWrite to Error Log failed due to error:\n'+error1
else:
....carry on with the rest of the program.
1 个回答
9
在Python 3中,当你在except SomeException as e:
这行代码中给异常指定一个变量时,退出except
块后,这个变量会被删除。
>>> e = "something"
>>> try:
... 1/0
... except ZeroDivisionError as e:
... print(e)
...
division by zero
>>> e
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'e' is not defined
你的代码也是这样:在except Exception as error:
和except Exception as error1:
这两个块中,error
和error1
在退出时都会被删除。