Python 3.x 字典中字符串的三元表达式

Python 3.x 字典中字符串的三元表达式,python-3.x,syntax-error,python-3.6,ternary-operator,Python 3.x,Syntax Error,Python 3.6,Ternary Operator,如何在不产生任何错误的情况下计算此三元表达式?当我在不使用字符串和eval()的情况下运行它时,它工作得非常好,直到我尝试使用字符串和eval()运行它为止 错误回溯: 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 ==

如何在不产生任何错误的情况下计算此三元表达式?当我在不使用字符串和
eval()
的情况下运行它时,它工作得非常好,直到我尝试使用字符串和
eval()
运行它为止

错误回溯:

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
回溯(最近一次呼叫最后一次):
文件“C:/Users/../mazefinder.py”,第25行,在
评估(c[i])
文件“”,第1行
如果y==1,则y+=1,否则打印('F')
^
SyntaxError:无效语法
我想让这段代码增加或减少x或y

您正在向需要表达式的“eval”函数提供“statement”。为变量赋值是一种“语句”。所以,如果您提供的是表达式,而不是语句,则不会引发错误

让我们考虑你确实需要使用“EVE”,然后你可以做如下:

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”

然后,这里有更多的问题和反模式,例如:

  • 在您的示例中根本不需要通过索引进行“迭代”
  • 这里使用“dict”是错误的对象类型,因为您的示例只需要值,而不需要注意键
  • 您可以执行冗余操作,例如将一个条件分离为多个单独的条件
  • 完全不清楚是否需要使用“eval”,只有在您确实需要时才应该使用

我们想要实现什么?几乎可以肯定有更好的方法。看看XY。
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")