J'ai une fonction qui ressemble à ceci:Code d'écriture pour exception TypeError en python
def fun(a,b,c=None): pass
Quand j'appelle cette fonction fun(1)
en python 3, Il me donne erreur TypeError: fun() missing 1 required positional argument: 'b'
ce qui est compréhensible, mais quand J'appelle cette fonction dans python 2, il me donne l'erreur comme TypeError: fun() takes at least 2 arguments (1 given)
.
Donc je veux attraper cette erreur dans python 2 car il est attrapé dans python 3 sans passer à python 3. Comment puis-je y parvenir? Aussi, si j'écris un décorateur pour cela je dois préserver la signature de la fonction à l'extérieur du décorateur.
les types des erreurs ne sont pas différents, c'est le message qui diffère. Les messages par défaut sont définis dans 'C' et il n'est pas possible de les modifier directement via Python. Vous pourriez attraper l'exception dans Python 2 et la relancer avec un message d'exception similaire dans Python 3 (mais cela nécessite une bonne quantité d'introspection de la pile d'appels et de l'objet fonction pour trouver l'argument manquant dans l'appel). –
Je suis nouveau sur python. Pouvez-vous me suggérer quelque chose pour le faire? @ JimFasarakis-Hilliard –
Honnêtement? N'utilisez pas Python 2, c'est le meilleur conseil. Puisque cette décision n'est peut-être pas à vous de décider, vous pouvez toujours regarder le module 'inspect' dans le fichier stdlib qui fournit des capacités d'introspection qui devraient vous aider avec ce que vous recherchez. –