Как правильно создать обработку ошибки в функции?

Я создал функцию, которая принимает два параметра. Далее был создан блок 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 шт):

Автор решения: CrazyElf

Чтобы поймать исключение, нужно оборачивать в 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 могут встречаться неоднократно на разных уровнях программы.

→ Ссылка