如何通过错误检查读取多个文件?

时间:2014-04-12 13:34:28

标签: python python-3.x python-3.3

我有一个读取多个文件的函数。像这样:

try:
    a = open("1.txt", "r")
    b = open("2.txt", "r")
    c = open("3.txt", "r")
except IOError:
    print("File {:s} failed".format(a, b or c))

我希望我能在阅读时看到哪个文件失败了。我可以以某种方式指定指定文件的IOError吗?我的意思是如果IOError出现在文件a中,请执行" command1",如果在文件b中,请执行" command2"等等?

1 个答案:

答案 0 :(得分:2)

IOError例外是OSError exception的别名,其属性为filename。您可以使用它根据失败的文件切换行为:

try:
    a = open("1.txt", "r")
    b = open("2.txt", "r")
    c = open("3.txt", "r")
except OSError as error:
    print("File {:s} failed".format(error.filename))

我使用了名字OSError; IOError已被弃用,只是为了向后兼容而保留,请参阅PEP 3151

演示:

>>> try:
...     open('Nonesuch.txt')
... except OSError as error:
...     print('File {:s} failed'.format(error.filename))
... 
File Nonesuch.txt failed

请注意,open()调用会抛出异常,因此不会进行任何分配。并且因为可以从多个位置(包括列表)引用文件对象,所以无法将文件对象或文件名映射回您要将其分配给的名称。如果您想知道文件对象绑定到abc中的哪一个,则必须创建自己的映射:

filenames = {'1.txt': 'a', '2.txt': 'b', '3.txt': 'c'}
print("File {} failed".format(filenames[error.filename]))