Comment corriger "a obtenu plusieurs valeurs de l'argument' erreur pour *args et **kwargs?
De considérer les éléments suivants:
def my_wrapper(wrapper_argument=False, *args, **kwargs):
return my_function(*args, **kwargs)
def my_function(arg1, arg2, params=None):
# do_stuff
return result
lorsque j'appelle le ci-dessus avec:
my_wrapper('foo', 'bar', wrapper_argument=True)
J'obtiens:
TypeError: my_function() got multiple values for argument 'wrapper_argument'
Pourquoi? Est l'ordre des arguments peut-être mal?
OriginalL'auteur Amelio Vazquez-Reina | 2015-02-05
Vous devez vous connecter pour publier un commentaire.
De l'affectation d'
foo
àwrapper_argument
(parce que sa le premier de position argument); puis de l'affectation en tant que mot-clé optionnel.Lorsque vous passez ces arguments de votre enveloppe à l'appelable, Python pop de l'erreur.
Pour l'éviter, ne passe pas dans un mot-clé optionnel semblable à un argument mot-clé.
OriginalL'auteur Burhan Khalid
Depuis que la question est pour Python 3, vous pouvez changer l'ordre des arguments dans la définition de la fonction comme suit:
Au lieu de:
faire:
et garder tout le reste la même.
OriginalL'auteur Amelio Vazquez-Reina
Oui:
wrapper_argument
a été donné pour la première fois sa valeur par défaut, puis la nouvelle valeur, ce qui n'est pas légal. Si vous souhaitez passer d'autres arguments par la position de sorte qu'ils finissent dansargs
plutôt quekwargs
, vous devez passerwrapper_argument
position. Un exemple simplifié, de sorte que vous avez publiées.OriginalL'auteur Terry Jan Reedy