NameError 但变量已定义
NameError but variable is defined
我将此作为 Python 练习来写。该循环应该接受用户输入并使用 eval 函数对其进行评估,并在用户输入 done 时退出循环。 Returns 输入之前的输入 完成.
def eval_loop():
while True:
x = ('done')
s = (input("write a thing. "))
s1 = s
print(eval(s))
if s == x:
break
return s1
eval_loop()
该代码适用于 5、10 + 3 等输入。但是当我输入 done 作为输入,我得到这个错误:
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
你不能这样评估 'text'。老实说,我建议您无论如何都不要使用 eval 解决此类问题。但如果你不得不这样做,你可以切换顺序并获得 try/catch.
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' is not defined
是因为您在使用 eval
之前没有检查输入是否为 done
。试试这个:
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 的评论和其他答案。
我将此作为 Python 练习来写。该循环应该接受用户输入并使用 eval 函数对其进行评估,并在用户输入 done 时退出循环。 Returns 输入之前的输入 完成.
def eval_loop():
while True:
x = ('done')
s = (input("write a thing. "))
s1 = s
print(eval(s))
if s == x:
break
return s1
eval_loop()
该代码适用于 5、10 + 3 等输入。但是当我输入 done 作为输入,我得到这个错误:
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
你不能这样评估 'text'。老实说,我建议您无论如何都不要使用 eval 解决此类问题。但如果你不得不这样做,你可以切换顺序并获得 try/catch.
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' is not defined
是因为您在使用 eval
之前没有检查输入是否为 done
。试试这个:
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 的评论和其他答案。