我想在同一行上捕获多个异常,但是根据触发哪个异常,结果会有所不同。我正在尝试在文本文件中汇总一组数字,并希望检查值和io错误。
try:
filex = open('test.txt', 'r')
number = filex.readline().rstrip('\n')
added = 0
while number != '':
added += int(number)
number = filex.readline().rstrip('\n')
print(added)
filex.close()
except (IOError,ValueError):
if IOError:
print('IOError')
else:
print('ValueError')
我遇到的问题是,它将始终在IF测试的第一个条件下触发。
答案 0 :(得分:2)
除了这种情况外,可以使用两个
try
.......
except IOError:
print('IOError')
except ValueError:
print('ValueError')
答案 1 :(得分:0)
我建议每个异常使用一个子句。这是“我很固执”的版本:
try:
filex = open('test.txt', 'r')
number = filex.readline().rstrip('\n')
added = 0
while number != '':
added += int(number)
number = filex.readline().rstrip('\n')
print(added)
filex.close()
except (IOError,ValueError) as e:
if isinstance(e, IOError):
print('IOError')
else:
print('ValueError')
这是每个例外条款的版本:
try:
filex = open('test.txt', 'r')
number = filex.readline().rstrip('\n')
added = 0
while number != '':
added += int(number)
number = filex.readline().rstrip('\n')
print(added)
filex.close()
except IOError:
print('IOError')
except ValueError:
print('ValueError')
您可以看到在第一个版本中,您必须实现类型检查,否则Python的异常处理将免费为您提供类型检查。第二个版本也略短一些。
答案 2 :(得分:0)
if IOError:
我认为这行检查IOError类的真实性。它会忽略引发的错误类型。
您也许可以执行以下操作:
except (IOError, ValueError) as e:
if instanceof(e, IOError):
#...