当前位置: 首页 > 面试题库 >

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

邵毅
2023-03-14
问题内容

my_var可以设置为None时,使用以下格式是否不好?

if my_var and 'something' in my_var:
    #do something

问题是,'something' in my_var如果my_var为None ,将引发TypeError。

还是我应该使用:

if my_var:
    if 'something' in my_var:
        #do something

要么

try:
    if 'something' in my_var:
        #do something
except TypeError:
    pass

换一个问题,以上哪一项是Python最佳实践(如果有)?

欢迎其他选择!


问题答案:

依赖条件语句的顺序是安全的(此处是Python参考),特别是由于您指出的问题-能够缩短可能导致一系列条件语句出现问题的评估是非常有用的。

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

IF exists(variable) AND variable.doSomething()
    THEN ...


 类似资料:
  • 问题内容: 可以安全地假设函数参数在Python中是从左到右求值的吗? 参考文献指出,这种情况会发生,但是也许有某种方法可以更改此顺序,这可能会破坏我的代码。 我想做的是为函数调用添加时间戳: 我知道我可以按顺序评估参数: 但是它看起来不太优雅,因此如果可以依靠它,我宁愿采用第一种方法。 问题答案: 是的,Python始终从左到右评估函数参数。 据我所知,这适用于任何逗号分隔的列表:

  • 问题内容: 如果您有一个if语句,其中对多个变量或函数进行了评估,那么按什么顺序对其进行评估? 在这种特定情况下,是将foo相对于5评估,然后将6相对于吧(从左至右)进行评估,还是将其从右至左进行评估?我假设a和以相同顺序求值。 问题答案: 如果第一个是,则将首先评估left子句,然后评估第一个。 这就是为什么您可以执行以下操作的原因: 没有破坏。 相反,对于子句,只有第一个为:时,将评估righ

  • 问题内容: 在Python中,我们可以这样做: 有人可以指出我有关此功能的文档吗? 它是语言的实现细节或功能吗? 利用此功能是否很好? 问题答案: 在和 短路 ,请参见布尔操作文档: 表达式首先计算; 如果为假,则返回其值;否则,将求值并返回结果值。 表达式首先计算; 如果为true,则返回其值;否则,将求值并返回结果值。 注意如何,对,是 只有 当评估计算为一个真正的价值。相反,for ,仅当评

  • 这段代码给出的答案不是很直观: 0 1 我明白为什么会发生这种情况-赋值的左侧返回对底层值的引用,同时创建上述值,然后才使用新计算的对右侧进行评估映射。 这种行为在C标准中是否有表述?还是求值顺序没有定义? 使用g 5.2.1获得结果。

  • 我相信C#一旦能够判断结果,就会停止评估if语句条件。例如: 由于条件

  • 问题内容: 说我有一大堆的是无论是变量或。我想在一个if语句中评估一组这些变量,以查看它们是否都像这样: 除非那行不通。我知道我可以这样做: 但这是非常丑陋的-特别是如果这些if语句将在我的代码中频繁出现。有什么方法可以使用更简洁的语法进行此评估(例如第一个示例)? 问题答案: 您永远不要使用(或)测试布尔变量。相反,要么写: 或使用(以及相关问题的表弟): 或使用Python的可传递比较: