在"try"运算符中嵌套"for"循环

use*_*257 0 python nested-loops

伙计们,

我已经辞职以解决这个问题,但我想检查Python是否真的按预期运行.

在示例中,"sample.txt"是任何读取和解析的多行文本文件.

try:
    file=open('sample.txt','r')
    for line in file:
          (some action here)
except:
    print "Couldn't open file"
file.close()
Run Code Online (Sandbox Code Playgroud)

我观察到的动作是打开"sample.txt"并处理第一行,然后逻辑进入"except"子句.

WAD还是这个bug?

Dav*_*nan 6

如果except块中的代码运行,则是因为引发了异常.你吞下这个例外,这让人很难知道出了什么问题.

您的错误消息表明您正在尝试捕获文件打开时引发的错误.但由于您的try块围绕文件的整个处理,因此处理中引发的异常(而不是文件打开)将被错误报告为"无法打开文件".如果你真的必须处理异常,那么你需要将for循环移动到except块之后.

就个人而言,我倾向于简单地忽略异常并让异常的默认处理暂停执行:

with open('sample.txt','r') as file:
    for line in file:
        (some action here)
Run Code Online (Sandbox Code Playgroud)

如果必须处理异常,则要辨别您处理的类异常.例如,处理只是IOError因为那是open在失败的情况下引起的.

try:   
    with open('sample.txt','r') as file:
        for line in file:
            (some action here)
except IOError:
    except IOError as (errno, strerror):
        print "I/O error({0}): {1}".format(errno, strerror)
Run Code Online (Sandbox Code Playgroud)