Какое решение лучше? (Обработка исключений) - PullRequest
0 голосов
/ 01 октября 2019

Где я должен поставить обработку исключений? какое из них является лучшим решением для кода:

def spam(divideBy):
    try:
        return 42 / divideBy
    except ZeroDivisionError:
        print('Error: Invalid argument.')
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))

ИЛИ

def spam(divideBy):
    return 42 / divideBy

try:
    print(spam(2))
    print(spam(12))
    print(spam(0))
    print(spam(1))

except ZeroDivisionError:
    print('Error: Invalid argument.')

Заранее спасибо.

1 Ответ

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

Первый метод означает, что любой пользователь функции spam() должен проверить, возвращает ли он число или None, прежде чем он попытается использовать результат (если все, что он делает, это печатает результат, как в вашемпример).

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

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

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

...