在if语句中依赖条件评估顺序是否安全?

tgr*_*ray 66 python if-statement

my_var可以是None 时使用以下格式是不好的做法吗?

if my_var and 'something' in my_var:
    #do something
Run Code Online (Sandbox Code Playgroud)

问题是'something' in my_var如果my_var为None ,则抛出TypeError.

或者我应该使用:

if my_var:
    if 'something' in my_var:
        #do something
Run Code Online (Sandbox Code Playgroud)

要么

try:
    if 'something' in my_var:
        #do something
except TypeError:
    pass
Run Code Online (Sandbox Code Playgroud)

要重新解释这个问题,上面哪一项是Python中的最佳实践(如果有的话)?

欢迎替代方案!

Dan*_*Lew 84

依赖于条件的顺序是安全的(这里是Python参考),特别是因为你指出的问题 - 能够短路评估可能会导致一系列条件问题非常有用.

这种代码在大多数语言中弹出:

IF exists(variable) AND variable.doSomething()
    THEN ...
Run Code Online (Sandbox Code Playgroud)

  • 当我看到第二个代码时,我认为编码器不了解短路评估的工作原理. (3认同)
  • 对于所有持消极态度的人来说,这是一个有效的问题,并且对于每种语言来说都不同。除非您使用“andalso”或“orelse”,否则 VB 将评估两者 (2认同)

var*_*tec 32

是的,它是安全的,它在语言参考中明确且非常明确地定义:

表达式x and y首先评估 x; 如果xfalse,则返回其值; 否则,y将评估并返回结果值.

表达式x or y首先评估 x; 如果x为真,则返回其值; 否则,y将评估并返回结果值.