Try 和 except 都在被另一个函数调用时执行

lea*_*eas 2 python error-handling exception python-3.x

我的代码发生了一些奇怪的事情,我有一个像这样的第一个函数:

def function1():
    try : #1
        #try to open a file
        #read file
        #return info variable from the file
    except : #1
        try : #2
            #try to open a web page
            #read web page
            if directory1 not in directorylist :
                #create directory1
                #change working directory to directory1
            else :
                #change working directory to directory1
            #write web page content in a file
            #return info variable from the file
        except : #2
            try : #3
                #try to open a second web page
                #print error message 1
            except : #3
                #print error message 2
        #set info variable to None
        #return info variable
Run Code Online (Sandbox Code Playgroud)

所以这个函数在主程序中调用时可以完美运行,但是当我尝试在另一个函数 2 中调用 function1 时,try#2 和 except#2 都被执行了!原因创建目录 1 并打印错误消息 1,我的信息变量也等于无。

如何在第二个函数混乱中调用 function1 try 和 except 子句?

谢谢 !

小智 5

为什么令人惊讶?try块应该执行,直到 someexception被引发,然后该except块将执行。那么为什么看起来两个块都被执行了,尽管有异常

最可能的原因之一是try块中的某些内容与引发的异常无关。这是else阻塞的主要原因。如下重构您的代码可能会有所帮助

try:
    # only statements that might raise exception
except SomeException:
    # except block
else:
    # everything you wanted do if no exception was raised
Run Code Online (Sandbox Code Playgroud)

如果它是一大块代码,使else块变胖,事情可能会顺利进行。