我现在有以下代码:
while executed == False:
try:
inp = input("Enter the variable you want to change (e.g.: limit = 10): ")
eval(inp, globals())
except:
print("Invalid input")
continue
print("Variable has been changed")
executed = True
而且我不太明白为什么如果我将
exit()
作为输入,它会进入无限循环,一遍又一遍地输出以下行:
Enter the variable you want to change (e.g.: limit = 10): Invalid input
无需我进一步输入任何内容。
我完全不明白为什么它会进入无限循环,因为我希望它要么完全退出,要么只是打印“无效输入”,然后要求我再次输入不同的内容。 为什么总是跳过input()部分直接跳到eval部分? (或者至少我认为这就是它正在做的)。
要调试问题,请将代码更改为以下内容:
from time import sleep
executed = False
while executed is False:
try:
inp = input("Enter the variable you want to change (e.g.: limit = 10): ")
eval(inp, globals())
except BaseException as e:
print("error is:", e, type(e))
print("Invalid input")
sleep(2)
continue
print("Variable has been changed")
executed = True
现在发生的是:
exit()
时,eval
可以正确执行命令exit()
。SystemExit
异常。except
子句中发现它,这意味着您不会让脚本完成。input()
,它无法从关闭的文件(stdin)中读取。