web-dev-qa-db-fra.com

IntelliJ Python 3 inspection "Attendait un dictionnaire, a obtenu un dict" un faux positif pour super avec ** kwargs?

J'utilise Python 3 et je veux encapsuler argparse.ArgumentParser Avec une classe personnalisée qui définit formatter_class=argparse.RawDescriptionHelpFormatter Par défaut. Je peux le faire avec succès, cependant IntelliJ IDEA 2017.1 avec Python Plugin (PyCharm) donne un avertissement pour le code suivant:

class CustomParser(argparse.ArgumentParser):
def __init__(self, formatter_class=argparse.RawDescriptionHelpFormatter, **kwargs):
    # noinspection PyArgumentList
    super().__init__(formatter_class=formatter_class, **kwargs)  # warning in this line for the last argument if suppression comment above removed

Si l'on supprime le commentaire avec la commande de suppression IntelliJ, l'avertissement sur kwargs est "Attendu un dictionnaire, a obtenu un dict", mais cela fonctionne. S'agit-il d'un faux avertissement positif ou cela peut-il être mieux fait sans l'avertissement? Y a-t-il un vrai problème derrière cet avertissement qu'il aide à éviter?

Question secondaire: y a-t-il une différence dans l'utilisation
formatter_class = kwargs.pop('formatter_class', argparse.RawDescriptionHelpFormatter) au lieu de définir explicitement le paramètre nommé dans la signature? Selon PEP2 plus explicite dans la signature, c'est mieux, non?

24
jan

Oui, cela semble être un faux positif.

Vous avez posé des questions sur formatter_class=kwargs.pop('formatter_class', argparse.RawDescriptionHelpFormatter). S'il vous plaît ne faites pas ça. La mutation de kwargs, qui apparaît comme argument suivant, semble incorrecte. De plus, les arguments de mot clé par défaut doivent être définis sur une constante simple plutôt que sur une structure de données modifiable, car il existe une grande différence entre l'évaluation au moment de l'importation et l'évaluation au moment de l'exécution. Voir par exemple http://www.effbot.org/zone/default-values.htm . L'idiome habituel serait formatter_class=None dans la signature, puis dans le corps, vous testez Aucun et vous mutez les kwargs à votre guise.

12
J_H