Не могу поймать ValueError в Python - PullRequest
0 голосов
/ 12 октября 2019

Я начинаю изучать Python, и я написал очень простой код для практики попробуй / исключая.

Вот код:

a = float(input('num1: '))
b = float(input('num2: '))

try:
      result = a / b
except ValueError as e:
      print ('error type: ', type (e))

print(result)

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

ZeroDivisionError & TypeError работают, но ValueError не работает.

Я даже помещаю вводы в отдельную попытку/ исключая и все еще не работает.

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

1 Ответ

1 голос
/ 12 октября 2019

Сбой происходит перед входом в блок попытки. Ошибка не выводится в блоке исключений, если вы вводите букву с текущим кодом.

Простое помещение секции ввода в отдельный блок try не приведет к ее обнаружению - вам нужен блок исключений, связанный спопытка, в которой происходит ошибка, например,

try:
    a = float(input('num1: '))
    b = float(input('num2: '))
except ValueError as e:
    print ('Value Error')

try:
    result = a / b
except ZeroDivisionError as e:
    print ('Zero DivisionError')

print(result)

В качестве альтернативы, вы можете поместить все входные данные и деление в блок try и поймать с вашей текущей отчетностью:

try:
    a = float(input('num1: '))
    b = float(input('num2: '))
    result = a / b
except ValueError as e:
    print ('error type: ', type (e))

print(result)

РЕДАКТИРОВАТЬ:Обратите внимание, что если в любом из них произойдет какая-либо ошибка, это впоследствии приведет к дальнейшим ошибкамВам лучше перейти со вторым вариантом, но переместить печать (результат) в блок try. Это единственный раз, когда он будет определен.

...