如何在不引发任何错误的情况下评估此三元表达式?当我在没有字符串和eval()
的情况下运行它时,它会完美运行,直到我尝试使用字符串和eval()
运行它。
c = {1: "y += 1 if y == 1 else print('F')",
2: "y -= 1 if y == 2 else print('F')",
3: "x += 1 if x == 1 else print('F')",
4: "x -= 1 if x == 2 else print('F')"}
for i in range(1,5):
eval(c[i])
错误追溯:
Traceback (most recent call last):
File "C:/Users/.../mazefinder.py", line 25, in <module>
eval(c[i])
File "<string>", line 1
y += 1 if y == 1 else print('F')
^
SyntaxError: invalid syntax
我希望此代码增加或减少x或y!
答案 0 :(得分:1)
您正在为期望表达式的“eval”函数提供“声明”。为var分配值是一个“语句”。因此,如果您提供表达式,则不会引发错误,但不会声明。
让我们考虑您确实需要使用“eval”,然后您可以执行以下操作:
x = 1
x += eval("1 if x == 1 else 0") # a statement is outside of an expression
x += eval("-1 if x == 2 else 0")
y += eval("1 if y == 1 else 0")
y += eval("-1 if y == 2 else 0")
我们更改了值而不是运算符,因此我们可以将语句移出“eval”,使两个条件结果都相同。
但是,即使不考虑“SyntaxError”错误,如果条件为“False”结果,您在自己的示例中也会出现“TypeError”错误,因为“print”函数返回“None”。
然后,你有更多的问题和反模式,如: