Python While循环无效语法
我试图使用这段代码从字符串创建while循环,但它不起作用。这是我用eval()函数调用的字符串:Python While循环无效语法,python,python-2.7,while-loop,Python,Python 2.7,While Loop,我试图使用这段代码从字符串创建while循环,但它不起作用。这是我用eval()函数调用的字符串: 'while True:\n\vprint("What role do you want?")\n\vAnswer = Reformat(raw_input())\n\vif Answer in RoleArray:\n\v\vPlayArray[0].append(Answer)\n\vif Answer == "Mafia":\n\v\v\vMafia.append(User)\n\v
'while True:\n\vprint("What role do you want?")\n\vAnswer = Reformat(raw_input())\n\vif Answer in RoleArray:\n\v\vPlayArray[0].append(Answer)\n\vif Answer == "Mafia":\n\v\v\vMafia.append(User)\n\v\velif Answer == "Sheriff":\n\v\v\vSheriff = User\n\v\velif Answer == "Doctor":\n\v\v\vDoctor = User\n\v\vdel RoleArray[RoleArray.index(Answer)]\n\velse:\n\v\vprint("That is not a role. Please check you spelling. [Mafia/Sheriff/Doctor/Townsperson]")'
这就是显示的错误:
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
eval('while True:\n\vprint("What role do you want?")\n\vAnswer = Reformat(raw_input())\n\vif Answer in RoleArray:\n\v\vPlayArray[0].append(Answer)\n\vif Answer == "Mafia":\n\v\v\vMafia.append(User)\n\v\velif Answer == "Sheriff":\n\v\v\vSheriff = User\n\v\velif Answer == "Doctor":\n\v\v\vDoctor = User\n\v\vdel RoleArray[RoleArray.index(Answer)]\n\velse:\n\v\vprint("That is not a role. Please check you s')
File "<string>", line 1
while True:
^
SyntaxError: invalid syntax
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
eval('while True:\n\vprint(“你想要什么角色?”)\n\vAnswer=Reformat(raw_input())\n\vif rolarray中的答案:\n\v\vPlayArray[0]。append(Answer)\n\vif Answer==“Mafia”:\n\v\v\vMafia.append(User)\n\v\velif Answer==“Sheriff”:“Sheriff”:\n\v\v\vSheriff=User\v\velif Answer==“Doctor=”医生”:\n\v\v\v\vDoctor=User\v\v\vdel[rolarray]\n\velse:\n\v\vprint(“这不是一个角色。请检查您的s')
文件“”,第1行
尽管如此:
^
SyntaxError:无效语法
有另一种方法可以正确执行此代码,但我想知道它为什么不工作。
谢谢。在评论之后,我意识到我真的很傻,没有使用
exec()
而不是eval()
,因为一个给我变量,另一个给我变量。谢谢你,Blorgbeard!在评论之后,我意识到我真的很傻,没有使用exec()
而不是eval()
,因为一个给我一个变量,另一个给我一个变量。谢谢你,Blorgbeard!最有可能的罪魁祸首是你对选项卡使用\v
而不是\t
。你需要修复这两个问题:
修复这两个选项将删除语法错误:
>>> exec("while True:\n\tprint('yup')\n\tbreak")
yup
>>> exec("while True:\n\vprint('yup')\n\vbreak")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 2
♂print('yup')
^
SyntaxError: invalid syntax
使用垂直选项卡会导致语法错误:
>>> exec("while True:\n\tprint('yup')\n\tbreak")
yup
>>> exec("while True:\n\vprint('yup')\n\vbreak")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 2
♂print('yup')
^
SyntaxError: invalid syntax
有关eval
和exec
之间差异的说明,请参阅
您可能还有其他语法错误,但我不打算调试那条很长的代码行
此外,您应该重新考虑使用动态代码消耗函数,如
eval
和exec
。即使代码的预期用途不存在任何安全风险,它们也会使调试和维护变得更加困难。无法避免的情况非常罕见 最可能的罪魁祸首是您对选项卡使用了\v
而不是\t
,以及您对eval
的使用。您需要解决这两个问题:
修复这两个选项将删除语法错误:
>>> exec("while True:\n\tprint('yup')\n\tbreak")
yup
>>> exec("while True:\n\vprint('yup')\n\vbreak")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 2
♂print('yup')
^
SyntaxError: invalid syntax
使用垂直选项卡会导致语法错误:
>>> exec("while True:\n\tprint('yup')\n\tbreak")
yup
>>> exec("while True:\n\vprint('yup')\n\vbreak")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 2
♂print('yup')
^
SyntaxError: invalid syntax
有关eval
和exec
之间差异的说明,请参阅
您可能还有其他语法错误,但我不打算调试那条很长的代码行
此外,您应该重新考虑使用动态代码消耗函数,如
eval
和exec
。即使代码的预期用途不存在任何安全风险,它们也会使调试和维护变得更加困难。无法避免的情况非常罕见 为什么要使用\v
?我想,你想要的是exec
,而不是eval
。另外,无论你在做什么,我强烈建议不要使用eval()\exec()
你需要\t
而不是\v
作为另一个旁注,这听起来有点像是一个X/Y问题。不要问如何解决你的解决方案。问问如何解决你的实际问题。为什么要使用\v
?我认为你想要的是exec
,而不是eval
。另外,无论你在做什么,我强烈建议你不要使用\v
使用eval()\exec()
你需要\t
而不是\v
作为另一个旁注,这听起来有点像一个X/Y问题。不要问如何解决你的解决方案。问问如何解决你的实际问题。使用\v很好,但我会记住\t。Thx。@GreenHawk1220 Hmm…你使用的是什么操作系统和python版本?这很奇怪导致语法错误的是我而不是你。使用\v很好,但我会记住\t。Thx@GreenHawk1220 Hmm…你使用的是什么操作系统和python版本?奇怪的是,它会导致语法错误的是我而不是你。你确定它有效吗?每当我使用exec()运行它时
我得到了一个SyntaxError
@leaf你可能看到了与我得到的问题类似的问题。你是用\v
还是\t
作为选项卡?@skrrgwsme我用的是\v
但它不起作用。事实上,当我在空闲中打印转义字符时,它会打印一个奇怪的空框。是的,它没有。我误读了它。例如ec()与\t解决了问题。Thx伙计们。你确定它工作正常吗?每当我使用exec()运行它时
我得到了一个SyntaxError
@leaf你可能看到了与我得到的问题类似的问题。你是用\v
还是\t
作为选项卡?@skrrgwsme我用的是\v
但它不起作用。事实上,当我在空闲中打印转义字符时,它会打印一个奇怪的空框。是的,它没有。我误读了它。例如ec()与\t解决了问题。谢谢各位。