Как проверить несколько исключений в одном блоке исключений? - PullRequest
0 голосов
/ 14 января 2020

Я хочу перехватить несколько исключений в одной строке, но результат будет разным в зависимости от того, какое исключение вызвано. Я пытаюсь суммировать набор чисел в текстовом файле и хочу проверить значения и ошибки ввода-вывода.

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')

Проблема, с которой я столкнулся, заключается в том, что она всегда срабатывает при первом условии ЕСЛИ тест.

Ответы [ 3 ]

2 голосов
/ 14 января 2020

может использовать два, кроме этого условия, как это

try 
  .......
except IOError:
    print('IOError')
except ValueError:
    print('ValueError')
0 голосов
/ 14 января 2020
if IOError:

Я думаю, что эта строка проверяет правильность класса IOError. Он игнорирует тип возникшей ошибки.

Возможно, вы могли бы сделать что-то вроде:

except (IOError, ValueError) as e:
    if instanceof(e, IOError):
        #...
0 голосов
/ 14 января 2020

Я рекомендую использовать одно предложение на исключение. Вот версия «Я упрямый»:

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 предоставит вам бесплатно. И вторая версия тоже немного короче.

...