Ich habe die anderen Threads gelesen, die mit diesem Fehler zu tun hatten, und es scheint, dass mein Problem einen interessanten Unterschied zu allen bisher gelesenen Beiträgen aufweist, nämlich, dass alle anderen bisherigen Beiträge den Fehler in Bezug auf einen der erstellten Benutzer aufweisen Klasse oder eine eingebaute Systemressource. Beim Aufrufen einer Funktion tritt dieses Problem auf. Ich kann nicht herausfinden, wofür es sein könnte. Irgendwelche Ideen?
BOX_LENGTH = 100
turtle.speed(0)
fill = 0
for i in range(8):
fill += 1
if fill % 2 == 0:
Horizontol_drawbox(BOX_LENGTH, fillBox = False)
else:
Horizontol_drawbox(BOX_LENGTH, fillBox = True)
for i in range(8):
fill += 1
if fill % 2 == 0:
Vertical_drawbox(BOX_LENGTH,fillBox = False)
else:
Vertical_drawbox(BOX_LENGTH,fillBox = True)
Fehlermeldung:
Horizontol_drawbox(BOX_LENGTH, fillBox = True)
TypeError: Horizontol_drawbox() got multiple values for argument 'fillBox'
python
python-3.x
Chopper Draw Lion4
quelle
quelle
Horizontol_drawbox
Funktion? Wenn es mit beginntfillBox
, ist dies der Fehler (einmal mit Positionsargument und ein zweites Mal mit Schlüsselwortargument zugewiesen).Antworten:
Dies geschieht, wenn ein Schlüsselwortargument angegeben wird, das ein Positionsargument überschreibt. Stellen wir uns zum Beispiel eine Funktion vor, die ein farbiges Kästchen zeichnet. Die Funktion wählt die zu verwendende Farbe aus und delegiert die Zeichnung des Felds an eine andere Funktion, wobei alle zusätzlichen Argumente weitergeleitet werden.
Dann der Anruf
schlägt fehl, weil zwei Werte zugewiesen sind
color
:"blellow"
als Position und"green"
als Schlüsselwort. (painter.draw_box
soll dieheight
undwidth
Argumente akzeptieren ).Dies ist im Beispiel leicht zu erkennen, aber wenn man die Argumente beim Aufruf verwechselt, ist das Debuggen möglicherweise nicht einfach:
Hier
color
wird20
dannargs=[30]
undcolor
wieder vergeben"green"
.quelle
color
Argument. Das Problem war etwas anders - meinmodel_matrix
Argument wurde nur noch mit Schlüsselwörtern versehen, und einige ältere Codes hatten es als Positionsargument übergeben. Die neue API hatte erwartetcolor
und stattdessen eine 4x4-Matrix erhalten.When a keyword argument is specified that overwrites a positional argument
. Aber warum kann letzterer arbeiten? Was ist die Regel, wenn Python die Argumente zuweist? Danke dir.Ich hatte das gleiche Problem, das wirklich einfach zu lösen ist, aber ich brauchte eine Weile, um es durchzusehen.
Ich hatte die Erklärung dorthin kopiert, wo ich sie verwendet hatte, und das Argument „Selbst“ dort belassen, aber es dauerte ewig, bis mir das klar wurde.
ich hatte
aber es hätte sein sollen
quelle
self
durch den Klassennamen. ;)Dies passiert auch, wenn Sie die
self
Deklaration innerhalb von Klassenmethoden vergessen .Beispiel:
Kann es nicht wie folgt nennen
self.is_overlapping(x1=2, x2=4, y1=3, y2=5)
:WERKE :
quelle
self
Argument in die Funktionsdeklaration einzufügen. dh wasdef myFunction(self, a, b, c='123')
geschrieben werden sollte alsdef myFunction(a, b, c='123')
. Und weilb
eine Liste undc
ein Skalar verwendet werden, werden bei fehlendem Selbst die Argumente durcheinander gebracht und schließlich geht die Eingabe vonb
anc
, was den Fehler "Mehrere Argumente" verursacht. Ich mache diesen Fehler, weil ich diese interne Methode außerhalb der Klasse getestet habe und vergessen habe, sie wieder hinzuzufügenself
. Ich hoffe, sie ist hilfreich für jemand anderen!@staticmethod
der ein besserer Ansatzself
erzielt werden kann, wenn dies nicht unbedingt erforderlich ist.Mein Problem war ähnlich wie das von Q --- ten, aber in meinem Fall hatte ich vergessen, das Selbstargument für eine Klassenfunktion anzugeben:
Soll werden
Diese fehlerhafte Implementierung ist beim Aufrufen der Klassenmethode wie folgt schwer zu erkennen:
Welches ergibt a
TypeError: got multiple values for argument
. Hoffentlich sind die restlichen Antworten hier klar genug, damit jeder den Fehler schnell verstehen und beheben kann. Wenn nicht, hoffe diese Antwort hilft Ihnen!quelle
Einfach ausgedrückt können Sie Folgendes nicht tun:
Weil Sie die Variable 'y' zweimal an die Funktion übergeben: einmal als kwargs und einmal als Funktionsdeklaration.
quelle
Ich wurde aus einem Grund hierher gebracht, der in den Antworten bisher nicht ausdrücklich erwähnt wurde, um anderen die Mühe zu ersparen:
Der Fehler tritt auch auf, wenn die Reihenfolge der Funktionsargumente geändert wurde - aus demselben Grund wie in der akzeptierten Antwort: Die Positionsargumente kollidieren mit den Schlüsselwortargumenten.
In meinem Fall lag es daran, dass sich die Argumentreihenfolge der Pandas-
set_axis
Funktion zwischen 0,20 und 0,22 geändert hat:Die Verwendung der häufig vorkommenden Beispiele für set_axis führt zu diesem verwirrenden Fehler, da beim Aufrufen von:
vor 0.22
['a', 'b', 'c']
wird der Achse zugewiesen, da dies das erste Argument ist und das Positionsargument dann "mehrere Werte" bereitstellt.quelle