Как правильно создать обработку ошибки в функции?
Я создал функцию, которая принимает два параметра. Далее был создан блок try/except, для обработки ошибки. В функции была указана инструкция raise. В целом блок try/except срабатывает, но при передаче в функцию 3 аргументов, try/except все также срабатывает, но выходит ошибка типа TypeError, которая сообщает о том, что было передано 3 аргумента, вместо двух, хотя именно эта ошибка обрабатывается в try/except.
Вот код, написанный мною:
user_data = ['Rashad', 23, True]
def user_info(name, comments_qty):
raise TypeError("Args must be 2")
if not comments_qty:
return f"{name} has no comments"
return f"{name} has {comments_qty} comments"
try:
user_info('Rashad', 23, True)
except TypeError as e:
print(e)
print(user_info(*user_data))
Ответы (1 шт):
Чтобы поймать исключение, нужно оборачивать в try/except именно тот блок кода, который это исключение выкидывает:
try:
print(user_info(*user_data))
except TypeError as e:
print(e)
Вывод:
user_info() takes 2 positional arguments but 3 were given
Если у вас много таких вызовов, вы можете обернуть его в функцию и вызывать уже саму эту функцию:
def user_info_try(user_data):
try:
return user_info(*user_data)
except TypeError as e:
print(e)
return "Ошибка!"
print(user_info_try(user_data))
Вывод:
user_info() takes 2 positional arguments but 3 were given
Ошибка!
В крупных программных проектах блоки try/except могут встречаться неоднократно на разных уровнях программы.