102 votes

Bonne façon d'affirmer le type de variable en Python

En utilisant une fonction, je souhaite m'assurer que le type des variables sont comme prévu. Comment le faire correctement ?

Voici un exemple de fausse fonction essayant de faire juste cela avant de continuer avec son rôle :

def my_print(begin, text, end):
    """Print 'text' in UPPER between 'begin' and 'end' in lower

    """
    for i in (begin, text, end):
        assert isinstance(i, str), "Input variables should be strings"
    out = begin.lower() + text.upper() + end.lower()
    print out

def test():
    """Put your test cases here!

    """
    assert my_print("asdf", "fssfpoie", "fsodf")
    assert not my_print("fasdf", 33, "adfas")
    print "All tests passed"

test()

Affirmer la bonne approche ? Devrais-je utiliser try/except à la place ?

En outre, mon jeu de tests d'assertion ne semble pas fonctionner correctement :S

Merci aux pythoniers

83voto

Alex Martelli Points 330805

Le isinstance intégré est le moyen préféré si vous le devez vraiment, mais encore mieux est de se souvenir de la devise de Python : "il est plus facile de demander pardon que la permission" !-) (C'était en fait la devise préférée de Grace Murray Hopper ;-). Soit :

def my_print(text, begin, end):
    "Print 'text' in UPPER between 'begin' and 'end' in lower"
    try:
      print begin.lower() + text.upper() + end.lower()
    except (AttributeError, TypeError):
      raise AssertionError('Input variables should be strings')

Ceci, BTW, permet à la fonction de fonctionner très bien sur les chaînes Unicode -- sans aucun effort supplémentaire !-)

27voto

Noctis Skytower Points 5137

Essayez cet exemple pour la version 2.6 de Python.

def my_print(text, begin, end):
    "Print text in UPPER between 'begin' and 'end' in lower."
    for obj in (text, begin, end):
        assert isinstance(obj, str), 'Argument of wrong type!'
    print begin.lower() + text.upper() + end.lower()

Cependant, avez-vous envisagé de laisser la fonction échouer naturellement à la place ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X