Irreführendes (?) TypeError beim Übergeben von Schlüsselwortargumenten an eine mit Positionsargumenten definierte Funktion

8

In cPython 2.4:

%Vor%

aber:

%Vor%

Natürlich verstehe ich wirklich Pythons Funktionsargument-Verarbeitungsmechanismus nicht. Wer möchte etwas Licht dazu bringen? Ich sehe was passiert (so etwas wie das Füllen von Argument-Slots, dann gebe ich auf), aber ich denke, das würde einen Neuling verderben.

(auch wenn Leute bessere Frage-Keywords haben - so etwas wie "Eingeweide" - bitte wiederholen)

    
Gregg Lind 01.02.2010, 20:10
quelle

2 Antworten

13

Wenn Sie sagen

%Vor%

Sie sagen Python, dass f 4 positional Argumente benötigt. Jedes Mal, wenn Sie f aufrufen, müssen genau 4 Argumente angegeben werden, und der erste Wert wird a , der zweite Wert b usw. zugewiesen.

Sie dürfen f mit etwas wie

aufrufen

f(1,2,3,4) oder f(a=1,b=2,c=3,d=4) oder sogar f(c=3,b=2,a=1,d=4)

aber in jedem Fall müssen genau 4 Argumente angegeben werden.

f(b=1,c=1,d=1) gibt einen Fehler zurück, da für a kein Wert angegeben wurde. (0 gegeben) f(a=1,b=1,c=1) gibt einen Fehler zurück, da für d kein Wert angegeben wurde. (3 gegeben)

Die Anzahl der angegebenen Argumente gibt an, wie weit Python gekommen ist, bevor ein Fehler erkannt wird.

Übrigens, wenn Sie

sagen %Vor%

Dann sagen Sie Python, dass f 4 optionale Argumente benötigt. Wenn ein bestimmter Arg nicht angegeben wird, wird der Standardwert automatisch für Sie bereitgestellt. Dann könntest du mit dem Aufruf von

davonkommen

f(a=1,b=1,c=1) oder f(b=1,c=1,d=1)

    
unutbu 01.02.2010 20:24
quelle
0

Es ist theoretisch möglich, den resultierenden TypeError mit etwas klarerem und informativem zu umhüllen. Es gibt jedoch viele kleine Details, von denen ich einige nicht zu lösen weiß.

HINWEIS: Der folgende Code ist ein kaum funktionierendes Beispiel, keine vollständige Lösung.

%Vor%     
HoverHell 21.11.2012 14:58
quelle

Tags und Links