2016-04-30 7 views
-2

Mein Code unten gibt eine unerwünschte None-Anweisung zurück. Ich habe andere Fragen in der Hoffnung gesucht, eine Lösung zu finden, aber ich kann nicht scheinen, es herauszufinden. Jede Hilfe wäre willkommen.Python - Code gibt eine unerwünschte None-Anweisung zurück

def int_mult(no1,no2): 
    try: 
     no3 = int(no1) 
     no3 = int(no2) 
    except ValueError: 
     return print("Error: Invalid Argument Type") 
    no1 = int(round(no1)) 
    no2 = int(round(no2)) 
    return (no1 * no2) 



print (int_mult(4.49,"apple")) 
+2

Was soll es zurückgeben? Es tut * genau * was es sollte, denn 'print' gibt None zurück. Möchten Sie verhindern, dass der zurückgegebene Wert gedruckt wird, wenn ein Fehler auftritt? – CodenameLambda

+0

Wenn es den "Fehler: Ungültiger Argumenttyp" trifft, möchte ich nicht, dass es auch "None" druckt. Was macht es gerade? Gibt es eine Möglichkeit, dies zu tun, ohne die print-Anweisung zu ändern und nur daran zu arbeiten, was in der Funktion ist? – user148615

Antwort

2

Ich denke, dass der beste Weg ist, eine Ausnahme zu erheben.

def int_mult(no1, no2): 
    try: 
     return int(no1) * int(no2) 
    except ValueError: 
     raise TypeError("Invalid Argument Type") 


try: 
    print(int_mult_(4.49, "apple")) 
except TypeError as e: 
    print(", ".join(e.args)) 
+0

Hallo danke, dass Sie mir geholfen haben, ich habe mich gefragt, ob es einen Weg gibt, dies zu erreichen, indem Sie nur das ändern, was innerhalb der Funktion ist und nicht mit der Print-Anweisung? – user148615

+0

Dann würden Sie den 'raise TypeError (" Invalid Argument Type ")' durch 'return" Invalid Argument Type "' ersetzen. Aber das ist * nicht * eine gute Art des Codierens, Sie sollten die zurückgegebenen Werte konsistent halten (in einer Weise, dass ein bestimmter Satz von Typen denselben Typ jedes Mal zurückgibt, egal welchen Wert, oder eine Ausnahme auslösen) . – CodenameLambda

0

in Zeile 5 Sie sagen:

return print("Error: Invalid Argument Type")

Das ist nicht Python nicht sagen, die Zeichenfolge in der Druckfunktion zurückzukehren. Stattdessen teilt dies Python mit, die Druckfunktion zurückzugeben.

Wahrscheinlich wird dies deutlicher machen:

In Ihrer letzten Zeile schreiben Sie:

print (int_mult(4.49,"apple")) 

Also zuerst Python läuft die int_mult() Funktion und die Funktion gibt

print("Error: Invalid Argument Type") 

dann Python druckt, genau wie Sie in Ihrer letzten Zeile angeordnet haben, genau das, was Ihre Funktion Int_mult() zurückgegeben hat. Für Python sieht es wie folgt aus:

print (print("Error: Invalid Argument Type")) 

In dieser Zeile Python läuft zunächst die Funktion print("Error: Invalid Argument Type") und druckt die Zeichenfolge. Danach läuft python print ( print ("Fehler: Ungültiger Argumenttyp") ) und druckt die Druckfunktion was None oder etwas wie <function house at 0x7f494763abf8> zurückgibt.

Wenn ich Sie wäre, würde ich gerade Linie 5 ändern zu

return ("Error: Invalid Argument Type") 

und Ihre letzte Zeile zu

print (int_mult(4.49,"android")) 

;)

Ich hoffe, dass ich Ihnen geholfen haben.

Verwandte Themen