Python “嵌套”;至于;循环在一个“内”;试一试;操作人员

Python “嵌套”;至于;循环在一个“内”;试一试;操作人员,python,nested-loops,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() 我观察到的操作是打开“sample.txt”并处理第一行,然后逻辑转到“e

各位

我已经开始着手解决这个问题,但我想检查Python是否真的按照预期运行

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

try:
    file=open('sample.txt','r')
    for line in file:
          (some action here)
except:
    print "Couldn't open file"
file.close()
我观察到的操作是打开“sample.txt”并处理第一行,然后逻辑转到“except”子句


WAD或这是一个错误吗?

如果
except
块中的代码运行,这是因为引发了异常。你吞下了异常,这使得你很难知道出了什么问题

您的错误消息表明您正试图捕获打开的文件中出现的错误。但是,由于您的
try
块包围了文件的整个处理过程,因此在处理过程中引发的异常(与打开的文件相反)将被错误地报告为“无法打开文件”。如果确实必须处理异常,则需要将
for
循环移动到
except
块之后

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

with open('sample.txt','r') as file:
    for line in file:
        (some action here)
如果您必须处理异常,那么请注意您处理的类异常。例如,只处理
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)

如果
except
块中的代码运行,这是因为引发了异常。你吞下了异常,这使得你很难知道出了什么问题

您的错误消息表明您正试图捕获打开的文件中出现的错误。但是,由于您的
try
块包围了文件的整个处理过程,因此在处理过程中引发的异常(与打开的文件相反)将被错误地报告为“无法打开文件”。如果确实必须处理异常,则需要将
for
循环移动到
except
块之后

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

with open('sample.txt','r') as file:
    for line in file:
        (some action here)
如果您必须处理异常,那么请注意您处理的类异常。例如,只处理
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)

那么,
open
行没有失败。有什么例外

try:
    file=open('sample.txt','r')
    for line in file:
          (some action here)
except:
    print "Exception:"
    import traceback; traceback.print_exc()

file.close()

那么,
open
行没有失败。有什么例外

try:
    file=open('sample.txt','r')
    for line in file:
          (some action here)
except:
    print "Exception:"
    import traceback; traceback.print_exc()

file.close()

除了之外的裸
捕获所有异常,包括
(此处的一些操作)
部分中的异常。将其重组为:

try:
    inputfile = open('sample.txt', 'r')
except:
    print "Couldn't open file"
else:
    for line in inputfile: pass
    inputfile.close()
或者更好:

with open('sample.txt', 'r') as inputfile:
    for line in inputfile: pass

一般来说,只在
try
块中包装尽可能少的代码,这样您就不会意外地处理您没有真正准备好处理的异常。

除了
之外的裸
捕获所有异常,包括
(此处的一些操作)
部分中的异常。将其重组为:

try:
    inputfile = open('sample.txt', 'r')
except:
    print "Couldn't open file"
else:
    for line in inputfile: pass
    inputfile.close()
或者更好:

with open('sample.txt', 'r') as inputfile:
    for line in inputfile: pass

一般来说,只在
try
块中包装尽可能少的代码,这样您就不会意外地处理未准备好处理的异常。

如果open()调用因某种原因失败,您的代码可能会引发另一个试图关闭文件的断言。这是因为,如果open()引发异常,则不会设置file变量,因此进一步调用将引用不存在的变量

如果可能,请尝试使用with语句:

with open('sample.txt', 'r') as file:
    try:
        for line in file:
            (some action)
    except:
        print "Exception"
        import traceback; traceback.print_exc()

这将确保无论with语句中发生了什么,文件都会在之后关闭。

如果由于某种原因open()调用失败,您的代码可能会引发另一个试图关闭文件的断言。这是因为,如果open()引发异常,则不会设置file变量,因此进一步调用将引用不存在的变量

如果可能,请尝试使用with语句:

with open('sample.txt', 'r') as file:
    try:
        for line in file:
            (some action)
    except:
        print "Exception"
        import traceback; traceback.print_exc()

这将确保无论with语句中发生了什么,文件都会在之后关闭。

尝试使用readlines生成文件中所有行的列表。而且,在没有至少打印错误代码的情况下,您也不应该捕获一般错误

try:
    file=open('sample.txt','r')
    for line in file.readlines():
          (some action here)
except Exception, e:
    print str(e)
file.close()

尝试使用readlines生成文件中所有行的列表。而且,在没有至少打印错误代码的情况下,您也不应该捕获一般错误

try:
    file=open('sample.txt','r')
    for line in file.readlines():
          (some action here)
except Exception, e:
    print str(e)
file.close()
我观察到的操作是打开“sample.txt”并处理第一行,然后逻辑转到“except”子句

是的,就是这样。但这只会在文件存在时发生

至于
except
子句(假设文件存在)中出现的错误,这意味着您实现的解析逻辑存在问题。我们无法确定它是什么,因为
except
捕获了所有内容,并且除非它被提升(那么最好不要捕获它…),或者你,否则你无法判断出哪里出了问题或哪里出了问题。总的来说,这就是为什么抓住一切都是不受欢迎的;这使得调试变得不必要的困难

我还注意到,您正在最后关闭文件。这可能是另一个错误源,因为该文件仅存在于
try
的范围内。您有两个选择:

  • file.close()
    包含在
    try
    块中,以便在完成后正确关闭文件,或者
  • 使用
    with
    语句作为上下文管理器,在完成后自动关闭文件@大卫·赫弗南的例子和我要写的很相似
  • 我观察到的操作是打开“sample.txt”并处理第一行,然后逻辑转到“except”子句

    是的,就是这样。但这只会在文件存在时发生

    至于
    except
    子句(假设文件存在)中的错误,这意味着