У меня есть функция, которая выглядит следующим образом:написание кода для исключения 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. Как я могу это достичь? Кроме того, если я пишу декоратор для этого, мне нужно сохранить подпись функции вне декоратора.
Типы ошибок не различны, это сообщение отличается. Сообщения по умолчанию определены в 'C' и не могут напрямую меняться через Python. Вы можете поймать исключение в Python 2 и повторно поднять его с похожим сообщением об исключении в Python 3 (но для этого требуется достаточное количество интроспекции стека вызовов и объекта функции, чтобы найти отсутствующий аргумент в вызове). –
Я новичок в python. Можете ли вы предложить мне что-то для этого? @ JimFasarakis-Hilliard –
Честно? Просто не используйте Python 2, это лучший совет. Поскольку это решение может и не быть вашим решением, однако, вы всегда можете посмотреть модуль 'инспекции' в stdlib, который предоставляет возможности самоанализа, которые должны помочь вам в том, что вам нужно. –