我有一个读取多个文件的函数。像这样:
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"等等?
答案 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()
调用会抛出异常,因此不会进行任何分配。并且因为可以从多个位置(包括列表)引用文件对象,所以无法将文件对象或文件名映射回您要将其分配给的名称。如果您想知道文件对象绑定到a
,b
或c
中的哪一个,则必须创建自己的映射:
filenames = {'1.txt': 'a', '2.txt': 'b', '3.txt': 'c'}
print("File {} failed".format(filenames[error.filename]))