2017-02-20 1 views
0

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.

+0

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). –

+0

Je suis nouveau sur python. Pouvez-vous me suggérer quelque chose pour le faire? @ JimFasarakis-Hilliard –

+0

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. –

Répondre

1

Qu'essayez-vous d'accomplir? python2 et les deux python3 jet 'TypeError', ce qui signifie que l'appelant utilise à mauvais escient la fonction 'fun'

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

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

Appeler pour python2:

python2 code_for_exception_type_error.py 
TypeError 

Et python3:

python3 code_for_exception_type_error.py 
TypeError 
+0

J'utilise python2. Dans mon module j'ai une fonction comme ci-dessus. Maintenant, quand quelqu'un d'autre utilisera cette fonction (amusant écrit dans la question ci-dessus) de mon module avec des paramètres incorrects, je veux attraper cette chose et écrire un message qui montre quel argument de position était manquant. Python3 gère cette chose en interne mais pas python 2. Alors, comment puis-je faire cette chose dans python2 et lancer mon erreur personnalisée avec un message. J'espère que je suis clair maintenant. –