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


Пример 1

Плохо:


try:
    value = collection['key']
except KeyError:
    value = None

Хорошо:


value = collection.get('key')


Пример 2

try-except вместо метода .get()

Плохо:


capitals = {
    'Россия': 'Москва',
    'Англия': 'Лондон',
}


def get_capitals(country):
    try:
        capital = capitals[country]
    except KeyError:
        capital = None
    finally:
        return capital


print(get_capitals('Китай'))

Хорошо:


capitals = {
    'Россия': 'Москва',
    'Англия': 'Лондон',
}


def get_capitals(country):
   return capitals.get(country)


print(get_capitals('Китай'))


Пример 3

try-except вместо метода .isinstance()

Плохо:


def calculate(num1, num2):
    try:
        result = num1 + num2
        return result
    except TypeError:
        logging.warning('Ошибка: аргументы должны быть числами.')


print(calculate(1, '2'))

Хорошо:


def calculate(num1, num2):
    if isinstance(num1, (int, float)) and isinstance(num2, (int, float)):
        result = num1 + num2
        return result
    logging.warning('Ошибка: аргументы должны быть числами.')


print(calculate(1, '2'))