Где я должен напечатать свой вывод при этой простой обработке исключений? (Python) - PullRequest
0 голосов
/ 19 ноября 2018

Здравствуйте, ребята, есть ли какие-либо различия между выводом моего вывода в предложении "try" или выводом после "кроме" предложения с помощью "else:"?вот код:

try:
    Value1 = int(input("Type the first number: "))
    Value2 = int(input("Type the second number: "))
    Output = Value1 / Value2
except ZeroDivisionError:
    print("Attempted to divide by zero!")
else:
    print(Output)

или это?

try:
    Value1 = int(input("Type the first number: "))
    Value2 = int(input("Type the second number: "))
    Output = Value1 / Value2
    print(Output)
except ZeroDivisionError:
    print("Attempted to divide by zero!")

Я имею в виду, какой из них лучше?потому что результат тот же.Спасибо.

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Первый будет работать в соответствии с вашими ожиданиями (при условии, что вы не хотите вызывать сообщение об ошибке Python и останавливать программу).Он просто предписывает, что IF 2-я цифра равна нулю, тогда он не будет выводить сообщение об ошибке Python и передавать его команде печати (и так и должно быть).В противном случае, в любом другом случае, независимо от того, какой это делитель, он всегда будет давать выход, так что вы устраните почти все лазейки.

Предложение: тип ввода должен быть плавающим, а не int, чтобы вы также могли печатать деление для ввода десятичных чисел.Экс-2/3

0 голосов
/ 19 ноября 2018

Как вы уже знаете, мы говорим об обработке ошибок при использовании try...except.
Когда ошибка генерируется операцией (или другими операторами), Python останавливает выполнение блока try и передается в первый , за исключением блока , который соответствует возбужденному исключению. В случае, если нет предложения исключений, которое соответствует нашему исключению, оно передается во внешнем операторе try До тех пор, пока он не будет обработан или не будет найден обработчик, возбуждаемое исключение становится необработанным исключением и выполнение останавливается с сообщением об отслеживании ошибки.

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

Ваши примеры

Как вы сказали, эти две части кода дают одинаковый результат. Однако, прочитав на документации страницу Python, мы получили следующее подтверждение:

" Использование предложения else лучше, чем добавление дополнительного кода к предложению try, поскольку это позволяет избежать случайного перехвата исключения, которое не было вызвано кодом, защищенным попробуйте ... кроме заявления."

Проще говоря, если у вас есть разные операторы, которые вызывают одну и ту же ошибку, но для одного из них вы не заинтересованы в его отлове, переместите его в условие else. Посмотрите на этот вопрос в стеке , чтобы лучше понять.

Так что в вашем случае вы можете разрешить оператор print в блоке try, потому что вы не поймаете некоторые особые исключения из него, и нет большой разницы в этом случае, когда вы помещаете оператор print. Тем не менее, я думаю, что второй пример - это хорошее логическое разделение типа «Если ошибок не было найдено, давайте выполним print».

0 голосов
/ 19 ноября 2018

Предложение else выполняется только в том случае, если не сгенерировано исключение.

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

Как вы упомянули, в вашем коде нет функциональной разницы с тем, что происходит.

См. документы для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...