Man*_*áoz 3 python exception-handling eager lazy-evaluation
有没有办法(使用eval或其他)在python中评估热切的布尔表达式?
我们来看看:
>>> x = 3
>>> 5 < x < y
False
Run Code Online (Sandbox Code Playgroud)
哎呀!这非常好,因为无论y价值如何,这都是假的.事情是,y甚至可以是未定义的,我想得到那个例外.即使事先知道结果,我怎样才能让python评估所有表达式?
希望我清楚自己!谢谢,
曼努埃尔
编辑:请记住,不能修改表达式,只需要评估技术.
(5 < x) & (x < y)
Run Code Online (Sandbox Code Playgroud)
通过使用比特和运营商&,你没有短路行为(如你得到and,or,链接,all/ any).短路通常被认为是可取的(快速和c)但如果你真的想要它并不难,没有它;-).
all([5 < x, x < y])
Run Code Online (Sandbox Code Playgroud)
最自然的方式可能是评估先前行的表达式.
a = foo()
b = bar()
if a and b:
...
Run Code Online (Sandbox Code Playgroud)
作为all([5 < x, x < y])隐藏的解决方案,副作用很重要,使用按位和(&)的解决方案似乎微妙和误用 - 这两个都需要在您的代码中注释,以显示您正在强制评估并将导致人们阅读您的代码思考什么他在想什么?.将重要的计算放在他们自己的行上比将它们隐藏在微妙的,一目了然的丑陋代码中更有意义.
虽然我的解决方案不会阻止NameErrorif b不存在(即,你有一个错字)并且a是错误的,但是如果你选择的话,你应该能够通过阅读你的代码并使用bugfinder来解决这个问题.