Совместимый с Python 2/3 способ проверки аргументов метода

#python #python-3.x #python-2.7

#python #python-3.x #python-2.7

Вопрос:

В Python 2 для проверки аргументов метода я могу использовать inspect.getargspec .

Однако в Python 3 была добавлена дополнительная замена под названием inspect.getfullargspec , которая inspect.getargspec стала устаревшей.

Существует ли способ написания совместимого с Python 2 и 3 кода, который проверяет аргументы? На самом деле мне нужно только выяснить во время выполнения количество аргументов, которыми обладает метод.

Комментарии:

1. звучит как вариант использования предложения try-except

2. Или if проверьте, какая версия запущена.

3. Конечно, хотелось бы этого избежать. 🙂

Ответ №1:

Существует общее решение для написания импорта, совместимого с Python2 / 3

 try:
    from inspect import getfullargspec as get_args
except ImportError:
    from inspect import getargspec as get_args

def foo(a, *args, **kwargs):
    pass

print(get_args(foo))

# Python 3
# FullArgSpec(args=['a'], varargs='args', varkw='kwargs', defaults=None, kwonlyargs=[], kwonlydefaults=None, annotations={})

# Python 2
# ArgSpec(args=['a'], varargs='args', keywords='kwargs', defaults=None)