2017-02-20 3 views
0

У меня есть функция, которая выглядит следующим образом:написание кода для исключения TypeError в питоне

def fun(a,b,c=None): pass

Когда я называю эту функцию fun(1) в Python 3, он дает мне ошибку, как TypeError: fun() missing 1 required positional argument: 'b' что вполне понятно, но когда Я вызываю эту функцию в python 2, она дает мне ошибку как TypeError: fun() takes at least 2 arguments (1 given).

Итак, я хочу поймать эту ошибку в python 2, поскольку она попадает в python 3 без переключения на python 3. Как я могу это достичь? Кроме того, если я пишу декоратор для этого, мне нужно сохранить подпись функции вне декоратора.

+0

Типы ошибок не различны, это сообщение отличается. Сообщения по умолчанию определены в 'C' и не могут напрямую меняться через Python. Вы можете поймать исключение в Python 2 и повторно поднять его с похожим сообщением об исключении в Python 3 (но для этого требуется достаточное количество интроспекции стека вызовов и объекта функции, чтобы найти отсутствующий аргумент в вызове). –

+0

Я новичок в python. Можете ли вы предложить мне что-то для этого? @ JimFasarakis-Hilliard –

+0

Честно? Просто не используйте Python 2, это лучший совет. Поскольку это решение может и не быть вашим решением, однако, вы всегда можете посмотреть модуль 'инспекции' в stdlib, который предоставляет возможности самоанализа, которые должны помочь вам в том, что вам нужно. –

ответ

1

Что вы пытаетесь достичь? python2 и python3 как бросить 'TypeError', что означает, что абонент злоупотребляет функции 'удовольствие'

def foo(a, b, c = None): 
    pass 

try: 
    foo(1) 
except TypeError: 
    print("TypeError") 

Calling его python2:

python2 code_for_exception_type_error.py 
TypeError 

И Python3:

python3 code_for_exception_type_error.py 
TypeError 
+0

Я использую python2. В моем модуле у меня есть функция, как указано выше. Теперь, когда кто-то другой будет использовать эту функцию (забавно написанную в вопросе выше) моего модуля с неправильными параметрами, я хочу поймать эту вещь и написать сообщение, которое показывает, какой позиционный аргумент отсутствует. Python3 обрабатывает эту вещь внутренне, но не python 2. Так как я могу сделать эту вещь в python2 и выбросить мою настроенную ошибку с сообщением. Надеюсь, теперь я поняла. –

Смежные вопросы