Python NameError,但已定义变量
我写这篇文章是为了练习Python。循环应该接受用户输入并使用eval函数对其进行评估,当用户输入done时,循环中断。返回在输入完成之前的输入 该代码对于输入(如5、10+3等)工作正常。但当我输入done作为输入时,会出现以下错误:Python NameError,但已定义变量,python,defined,Python,Defined,我写这篇文章是为了练习Python。循环应该接受用户输入并使用eval函数对其进行评估,当用户输入done时,循环中断。返回在输入完成之前的输入 该代码对于输入(如5、10+3等)工作正常。但当我输入done作为输入时,会出现以下错误: Traceback (most recent call last): File "C:/Users/rosem/Progs/1101D4.py", line 11, in <module> eval_loop()
Traceback (most recent call last):
File "C:/Users/rosem/Progs/1101D4.py", line 11, in <module>
eval_loop()
File "C:/Users/rosem/Progs/1101D4.py", line 6, in eval_loop
print(eval(s))
File "<string>", line 1, in <module>
NameError: name 'done' is not defined
你不能那样评估“文本”。我真诚地建议你无论如何不要用eval来解决这个问题。但是如果你不得不这样做,你可以改变顺序,试试看
def eval_loop():
while True:
x = ('done')
s = input("write a thing. ")
s1 = s
#check if input is 'done'
if s == x:
break
else:
try:
#evaluate
print(eval(s))
#error caused by s being something like 'foo'
except NameError:
pass
return s1
eval_loop()
你不能那样评估“文本”。我真诚地建议你无论如何不要用eval来解决这个问题。但是如果你不得不这样做,你可以改变顺序,试试看
def eval_loop():
while True:
x = ('done')
s = input("write a thing. ")
s1 = s
#check if input is 'done'
if s == x:
break
else:
try:
#evaluate
print(eval(s))
#error caused by s being something like 'foo'
except NameError:
pass
return s1
eval_loop()
NameError:name'done'未定义正在发生,因为您没有检查输入是否在使用eval之前完成。相反,请尝试以下方法:
def eval_loop():
while True:
s = (input("write a thing. "))
s1 = s
if s == 'done':
break
print(eval(s))
return s1
eval_loop()
如果不检查,python将尝试运行done,这将抛出错误
另请参见Brain的评论和另一个答案。名称错误:名称“完成”未定义正在发生,因为您没有检查输入是否在使用eval之前完成。相反,请尝试以下方法:
def eval_loop():
while True:
s = (input("write a thing. "))
s1 = s
if s == 'done':
break
print(eval(s))
return s1
eval_loop()
如果不检查,python将尝试运行done,这将抛出错误
另请参阅Brain的评论和另一个答案。如果您仅使用x来检查输入是否='done',那么只要在s='done'时执行即可:@havenieday您的意思是如果s='done':,对,您在哪里学会了以这种方式使用eval?您几乎肯定不想在任意用户输入上使用eval。永远,永远,永远,永远,永远!!!这是非常不安全的,并且在99%的情况下是不必要的。如果您仅使用x检查输入是否='done',那么如果s=='done',则只需执行即可:@havenieday您的意思是如果s=='done',则正确,您在哪里学会了以这种方式使用eval?您几乎肯定不想在任意用户输入上使用eval。永远,永远,永远,永远,永远!!!这是非常不安全的,并且在99%的情况下是不必要的。