2016-06-19 11 views
0

Ich bekomme eine invalid literal for int() with base 10, wo es scheint, als ob der Eingabe-Stream Werte in einer Schleife erzeugt verkettet.Python: ungültiges Literal für int() mit Basis 10

def collectData(): 
    lst = makeCases() 
    cases = int(input()) 
    for i in range(cases): 
     size = int(input()) 
     case = [] 
     for j in range(size): 
      value = int(input()) 
      case +=[value] 
     insert(lst,case) 
    return lst 

Das ist die Funktion, die das Problem erzeugt. Die Variablen value und size sind das Problem, da sie die nachfolgenden Werte vor der Konvertierung zu verketten scheinen.

Die Funktion makeCases() generiert ein Tupel auf dem Formular ("Case",[]).

EDIT: Der Code funktioniert lokal gut, aber funktioniert nicht in der hackerrank IDE

+0

Sie verwenden 'int (input())' an mehreren Stellen. Offensichtlich gibt 'input() 'etwas anderes als eine Zahlenfolge in einem dieser Aufrufe zurück. Finden Sie heraus, welche Zeichenfolge Sie an 'int()' übergeben und beheben Sie sie. Sie könnten Ihre eigene 'input_int'-Funktion schreiben, die fehlerhafte Werte abfängt und ausdruckt. Jedenfalls glaube ich nicht, dass das Problem etwas mit der Verkettung zu tun hat. –

+2

Python3 oder Python2? – rrauenza

+0

Sie haben wahrscheinlich eine leere Zeile oder der Benutzer drückt einfach . Sie sollten die Antwort von 'input()' testen, bevor Sie in ein 'int' konvertieren oder die Ausnahmebehandlung verwenden. – cdarke

Antwort

2

Als Tom Karzes gesagt hat, input() ist etwas anderes als eine Zahl zurück. Wenn ich mir die Fehlermeldung ansehe, die von Python erzeugt wird, nehme ich an, dass Sie Python 3 verwenden, aber ich werde auch Python 2 behandeln.

Python 2

input() prüft, ob die gegebene Eingabe von stdin etwas kann es ist eval Uate zu. Es entspricht eval(raw_input()). (Pydoc)

>>> a = input() 
123 
>>> a 
123 
>>> abc = 3 
>>> a = input() 
abc 
>>> a 
3 

Es erzeugt einen anderen Fehler, wenn Sie input() etwas kann es nicht eval:

>>> a = input() 
abc 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<string>", line 1, in <module> 
NameError: name 'abc' is not defined 

Da es eval auf der gegebenen Eingabe durchführt, wird es davon aus, dass abc ein Variablenname sein kann. Es sucht danach, gibt aber einen Fehler aus, weil es nicht gefunden werden konnte.

Python 3

input() ist die neue raw_input() in Python 2. input() liefert einen String, auch wenn die gegebene Eingabe eine Zahl ist. (Pydoc)

>>> a = input() 
123 
>>> a 
'123' 

Dies ist der wahrscheinlichste Grund, warum Sie es zu einem int() umwandeln würde, nachdem Sie eine input() bekommen.

Ich kann Ihre Fehlermeldung replizieren wie so (in Python 3):

>>> a = int(input()) 
abc 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: 'abc' 
>>> a = int(input()) 
123 123 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: '123 123' 

Abschließend der wahrscheinlichste Grund, warum es solch einen Fehler zurückgibt, weil man es etwas geben es nicht konvertieren kann ein int.

Verwandte Themen