Python中的f.readlines方法在哪些情况下会失败?

3

我使用以下代码读取文本文件(通常有几千行)。except Exception as e 块是否是不必要的?

try:
        in_file=open(in_file,'rU')
        try:
            in_content=in_file.readlines()
        except Exception as e:
            sys.stderr.write('Error: %s\n' % e.message)
            sys.exit(1)
        finally:
            in_file.close()
except IOError:
        sys.stderr.write('I/O Error: Input file not found.')
        sys.exit(1)

此外,请告诉我Python中file.readlines()方法失败的情况?

为什么要手动将错误消息写入stderr而不是直接引发错误? - Remi Guan
我可以这样做。但是我只是想打印一个用户友好的消息,而不是使用 raise 命令,它会打印出整个的 traceback。 - Slothworks
2个回答

1
我认为IOError是唯一可能发生的事情。这涵盖了文件不存在和权限不足两种情况。我看过的任何Python参考资料都只涉及到文件的IOError :)。我不确定你所说的堆栈跟踪是什么意思,因为它似乎只是打印错误本身?
import sys
try:
    with open("in_file",'rU') as in_file:
        in_content=in_file.readlines()
except Exception as e: #Should be replaceable with IOError, doesn't hurt to not 
    sys.stderr.write('%s\n' % e)
    sys.exit(1)

我也这么认为 :) 这也是文档唯一提到的事情。虽然也许看一下源代码会很有趣。但我不太确定我应该在哪里查看。我指的是当我raise异常而不是写入stderr时的堆栈跟踪。 - Slothworks

0

Python 读取文件的方式如下:

with open(in_file_name,'rU') as in_file:
    in_content = in_file.readlines()

这应该为您的代码带来所有的好处,因此您不必担心可能发生的哪种错误。Python会处理它。使用with语句打开的文件将在异常情况下关闭。


但如果我想让我的脚本返回一个退出代码,这是不可能的,对吗? - Slothworks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接