Python While循环无效语法

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循环,但它不起作用。这是我用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 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解决了问题。谢谢各位。