Python: причина ошибки типа с неправильным числом аргументов

1

Недавно я столкнулся с "особенностью" Python, которую я нашел не очень хорошо продуманным: Python вызывает TypeError если вызывается функция с неправильным числом аргументов. Я хотел бы понять, в чем причина этого выбора.

Более подробная информация: я нахожу, что настраиваю систему обратного вызова и, среди прочего, проверяю, может ли (пользовательский) обратный вызов принимать или не аргумент. Я должен проверить этот фронт, когда мне дают обратный вызов, потому что, если я просто делаю что-то вроде:

try:
    call_the_callback(one_argument)
except TypeError:
    call_the_callback()
except Exception:
    do_something_else()

Я нахожу себя в неудобной ситуации ловли также TypeError брошенного внутренней обработкой обратного вызова (возможно, он ожидал строку вместо целого числа или что-то еще), что я определенно должен различать.

В конце концов, я обошел это с проверкой следующим образом (думаю, это только для Python 3):

callsign = signature(action)
nargs = len(callsign.parameters)

а затем с помощью соответствующего вызова. Однако, помимо этой конкретной проблемы, я просто не могу понять, почему под тем же зонтиком вызывается звонок с неправильным количеством аргументов и, скажем, 1/"three".

ПРИМЕЧАНИЕ. Я понимаю, почему возникает ошибка при вызове с неправильным количеством аргументов, я определенно хочу этого! Моя проблема заключается в понимании того, почему TypeError возникает, а не что-то более конкретное. Я хочу получить более глубокое понимание этого, чтобы лучше разработать стратегии для решения такой ситуации.

Ссылки:

Слишком общие, только о том, что вызов с неверным числом аргументов "какая - то TypeError ": Почему TypeError, когда слишком много/слишком мало арга в вызове функции Python

Обсуждает проблему, но не отвечает на вопрос: https://bytes.com/topic/python/answers/45841-incorrect-number-arguments

Теги:
exception-handling
typeerror

1 ответ

0

Я думаю, что почти все языки программирования имеют обязательные параметры для функции, и если эти параметры не получены, возникает исключение. Это полезно для обеспечения правильного использования этой функции. Если параметры функции не являются обязательными, вам нужно больше логики обработки внутри функции, чтобы охватить все случаи.

Но вы можете использовать необязательные параметры или общие параметры вместе с или без обязательных параметров. Например, bellow - это функция, которая позволяет вам иметь любое количество параметров (простые или ключевые параметры), а параметр не обязательно:

def f1(*args, **kwargs): 
  print args
  print kwargs
f1(1,'param', a=4)

Для получения дополнительной информации см.: Generic function in python - вызов метода с неизвестным числом аргументов

  • 0
    Я знаю это, но если я что-то упустил, это совершенно не имеет отношения к вопросу. Дело в том, что я не контролирую функцию, которая должна вызываться, и мне приходится жить с этим.
  • 0
    Если вы определяете функцию с необязательными параметрами, TypeError больше не будет вызываться, и функция будет выполняться независимо от количества полученных параметров. Пожалуйста, дайте больше деталей / перефразируйте, если эта информация не поможет вам.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню