尝试,除了在被另一个函数调用时执行

时间:2016-04-16 08:58:44

标签: python python-3.x exception error-handling

我的代码出现了一些奇怪的事情,我有一个第一个功能:

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

所以这个函数在主程序中调用时效果很好,但是当我尝试在另一个函数2中调用function1时,都会尝试#2和#2除外!原因创建了directory1并打印了错误消息1,同样我的info变量等于None。

如何在第二个函数中调用function1并尝试除了子句?

谢谢!

2 个答案:

答案 0 :(得分:4)

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

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

try:
    # only statements that might raise exception
except SomeException:
    # except block
else:
    # everything you wanted do if no exception was raised

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

答案 1 :(得分:0)

如果在执行try#2的主体时引发异常,显然除了#2将被执行。您可能应该检查引发的异常类型以及哪一行。