如果第一个条件为假,python 3“ AND”语句在​​返回之前是否评估所有条件

时间:2019-10-23 19:46:48

标签: python-3.x

我在try / except块中有以下代码:

if current_path is not None and isinstance(current_path, str) and os.path.exists(current_path):
                os.chdir(current_path)

在正常情况下,这可以正常工作,但是,如果代码在分配current_path之前失败,则会出现错误消息,指出在分配之前已对其进行了引用。 if语句中的第一个条件是检查它是否被赋值,我是基于这样的假设,如果第一个条件为false,我将始终为false,不是吗?

关于如何更好地做到这一点的任何建议?我唯一的其他想法是嵌套if语句。任何建议,将不胜感激。

2 个答案:

答案 0 :(得分:1)

if current_path is not None:

仅凭该条件不足以检查current_path是否已被分配,仅当它是否为None时(分配/定义之前不是None) -它根本不存在。

检查它是否存在的正确方法是使用try...except的“请求宽恕,而不是允许”的python方法:

try:
    if current_path is not None:
        do_something() # current_path is both assigned and is not None
    else:
        something_else() # current_path is assigned but is None
except NameError:
    handle_it() # current_path has never been assigned / defined

答案 1 :(得分:0)

这与and无关。您说您希望代码在分配给您的try / except块中的某处之前,就像current_pathNone一样工作。在Python中,您需要明确地做到这一点:

current_path = None

在代码中的较早位置,以便可以确定它已在if语句之前运行。