如何在一个异常块内检查几个异常?

时间:2020-01-13 21:47:08

标签: python exception try-catch

我想在同一行上捕获多个异常,但是根据触发哪个异常,结果会有所不同。我正在尝试在文本文件中汇总一组数字,并希望检查值和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测试的第一个条件下触发。

3 个答案:

答案 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):
        #...