J'essaie d'appliquer un type statique en vérification de type statique dans un projet écrit en Python, en utilisant le module code> typing code>.
Quand je définis une fonction comme celui du DOC P> et essayez de faire quelque chose comme mais quand je définis à nouveau une fonction appelée et do et do J'ai défini les deux fonctions dans Exactement le même environnement, c'est-à-dire une session d'interaction Python utilisant ITERM. Pourquoi cela arriverait-il? P> p> message d'accueil (3) code>, j'ai en effet eu l'erreur suivante p>
test code> < / p>
test ("a") code>, j'ai
a code> imprimé sans erreur soulevée. J'ai aussi essayé p>
test (3) code>, mais aucun typeError n'est augmenté. P>
3 Réponses :
L'indice ici est dans le numéro de ligne: L'erreur se produit dans la fonction, lorsque vous essayez d'ajouter Il existe des projets tels que 'Hello' code> et
3 code>. Les annotations de type sont vérifiées pour la correction syntaxique par l'interprète, mais ne sont pas autrement utilisées. P>
mypy code>
qui utilise les annotations pour la vérification du type d'état et divers autres fins. P>
type annotations de type en python ne pas strong> appliquer la vérification du type statique. Python est toujours une langue dynamique, où l'interprète vérifie s'il a une méthode pour faire l'opération, ajoutez un STR ("Bonjour ") et ajoutez un entier (3), lorsqu'il atteint cette ligne pendant la boucle d'exécution. PEP-484 stipule le noyau -Développeurs ne veulent pas changer cela avec des annotations. P> Si vous regardez la documentation, il s'appelle 'Type Inc. . Les astuces ne sont pas appliquées. P> Les indices de type sont vraiment pour les développeurs et leurs outils (comme IDes) afin de mieux documenter le type attendu d'un paramètre. Mais l'ajout de cette forme de documentation ne place aucune restriction l'argument. C'est L'erreur que vous voyez se produit sans ces annotations. E.g. P> Il est possible de développer des outils pour le faire si vous le souhaitez. L'annotation sur l'objet p> Utilisez le dactylographie de canard pour vous aider à sortir forte>
L'erreur de type que vous avez soulevée serait évitée si vous avez utilisé la mise en forme de chaîne intégrée ou lancer la valeur entrante sur une chaîne avant d'appeler Ajouter. Par exemple, pour éviter l'erreur que vous avez vue, vous pourriez: P> def greeting(name: str) -> str:
"""Greeting to name
:param name: str, the name to greet
Returns string"""
return "hello" + str(name)
def greeting(name: str) -> str:
"""Greeting to name
:param name: str, the name to greet
Returns string"""
return "hello {}".format(name)
Les annotations de type sont
Le typeError soulevé par la salutation vient d'ajouter un entier à une chaîne, non dû à la typée
Mais alors qu'est-ce que le DOC signifie par "vérificateur de type statique" si les annotations de type n'appliquent pas le type de vérification du type?