2016-07-29 2 views
0

Ich versuche, eine Übung abzuschließen, die mich auffordert, die TypeError-Ausnahme in Python zu verwenden, um Zeichenfolgen zu berücksichtigen, wenn Ganzzahlen erforderlich sind. Das Beispiel ist einfach, ich frage den Benutzer nach zwei Zahlen und füge sie dann hinzu. Ich möchte einen try-Block verwenden, wenn der Benutzer versehentlich einen String anstelle eines int eingibt. Was ich erhalte, ist wieder ein Zurückverfolgungsvalueerror sagen etwas über Basis von 10.typeerror Ausnahme funktioniert nicht

Hier ist der Code:

print ("Give me two numbers, and I'll add them.") 
print ("Enter 'q' to quit.") 

while True: 

    try: 
     num1 = input("\nEnter first number: ") 
     if num1 == 'q': 
      break 
    except TypeError: 
     print ("Please enter a number not a letter.") 
    try:  
     num2 = input("\nEnter second number: ") 
     if num2 == 'q': 
      break 
    except TypeError: 
     print ("Please enter a number not a letter.") 

    sum = int(num1) + int(num2) 
    print ("The sum of your two numbers is: " + str(sum)) 

Hier ist die Fehlermeldung:

Traceback (most recent call last): 
    File "chapt10 - files and exceptions.py", line 212, in <module> 
    sum = int(num1) + int(num2) 
ValueError: invalid literal for int() with base 10: 'd' 
+0

Wenn Sie einen Fehler haben * immer * den vollständigen Text des Tracebacks enthalten. Wenn Sie sensible Informationen haben, können Sie * das * maskieren * –

+0

das Konvertieren eines 'str' in ein' int' löst keinen 'TypeError' aus, es löst nur einen' ValueError' aus, wenn der String nicht in einen gültigen int konvertiert werden kann. –

Antwort

0

Es ist toll, Sie haben bereits eine try/except blockieren, aber das Problem ist das Konstrukt wird nicht korrekt verwendet. Wenn anstelle einer Nummer ein Buchstabe eingegeben wird, ist dies ein ValueError kein TypeError. Deshalb haben Sie eine ValueError, die durch Ihren Code ausgelöst wird, wenn ein Brief eingegeben wird; Diese Ausnahmeklasse wird nicht behandelt.

Noch wichtiger ist, die try Block sollte auch tatsächlich die Operation, die den Fehler wahrscheinlich zu erhöhen ist:

print ("Give me two numbers, and I'll add them.") 
print ("Enter 'q' to quit.") 

while True: 
    num1 = input("\nEnter first number: ") 
    num2 = input("\nEnter second number: ") 
    if num1 == 'q' or num2 == 'q': 
     break 
    try: 
     num1 = int(num1) # casting to int will likely raise an error 
     num2 = int(num2) 
    except ValueError: 
     print ("One or both of the entries is not a number. Please try again") 
     continue 
    total = num1 + num2 
    print ("The sum of your two numbers is: " + str(total)) 

Auf einer Seite zur Kenntnis, sum als Name der Variablen verwendet, ist nicht gute Idee, wie sum ist ein eingebauter Python.

+0

'total' ist ein guter Name anstelle von' sum' –

+0

@WayneWerner Ja, richtig. Vernünftiger –

+0

Vielen Dank für diese Antwort Moses, aber die Übung soll mir zeigen, wie TypeError nicht TypeValue funktioniert. Der von Ihnen verwendete Code ist für mich sinnvoller, aber ich möchte wissen, wann die TypeError-Ausnahme verwendet werden soll. –

Verwandte Themen