If statement 为什么python中的代码是有效的?没有if与else匹配

If statement 为什么python中的代码是有效的?没有if与else匹配,if-statement,If Statement,没有与else:语句之一匹配的if语句。除非在if块内进行尝试,否则会影响缩进吗 if 0 != sys.argv[1].find("clean"): #Dont check if we are cleaning! if sys.platform.startswith("win"): try: files = O.listdir(O.path.join(libdirs)) print "files is ",files except:

没有与else:语句之一匹配的if语句。除非在if块内进行尝试,否则会影响缩进吗

if 0 != sys.argv[1].find("clean"): #Dont check if we are cleaning!
if sys.platform.startswith("win"):
    try:
        files = O.listdir(O.path.join(libdirs))
        print "files is ",files
    except:
        raise Exception("The FMI Library binary cannot be found at path: "+str(O.path.join(libdirs)))
    for file in files:
        if "fmilib_shared" in file and not file.endswith("a"):
            print "was true for ", file
            shutil.copy2(O.path.join(libdirs,file),O.path.join(".","src","pyfmi"))
            fmilib_shared = O.path.join(".","src","pyfmi",file)
            print "fmilib_shared is ",fmilib_shared
            break
    else: # THIS IS THE ELSE BLOCK IN QUESTION
        print "We have entered the else block in question"
        raise Exception("Could not find FMILibrary at: %s"%libdirs)
    print "copy_gcc_lib flying sheep ", copy_gcc_lib    
    if copy_gcc_lib:
        path_gcc_lib = ctypes.util.find_library("libgcc_s_dw2-1.dll")
        if path_gcc_lib != None:
            shutil.copy2(path_gcc_lib,O.path.join(".","src","pyfmi"))
            gcc_lib = O.path.join(".","src","pyfmi","libgcc_s_dw2-1.dll")

代码来自PyFMI库的setup.py文件。
else
语句连接到
for
循环,而不是
块之外的
。在
for
循环上使用
else
子句是非常好的,如果循环耗尽了它正在迭代的列表,它将被执行。有关更多文档,请参阅

代码中发生的情况是,如果
files=…
导致异常,它将被捕获,并且信息性消息将与新异常一起打印(在这种情况下,将永远不会执行
for
循环)。如果没有异常,则
for
循环将在文件上迭代搜索特定的文件。如果未找到此文件,则将执行
for
循环中的
else
子句,并引发异常。但是,如果找到文件,
break
语句将导致
for
循环提前终止,因此将不会执行
else
子句

要回答您的问题,try-except块不会影响缩进