我在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语句。任何建议,将不胜感激。
答案 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_path
是None
一样工作。在Python中,您需要明确地做到这一点:
current_path = None
在代码中的较早位置,以便可以确定它已在if
语句之前运行。