Избыточный try-except
Анти-паттерн
Использовать 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'))