753 Stimmen

ValueError: ungültiges Literal für int() mit Basis 10: ''

Warum bekomme ich diesen Fehler?

ValueError: Ungültiges Literal für int() mit Basis 10: ''.

866voto

FdoBad Punkte 6477

Am Ende der Fehlermeldung steht der Wert, der geparst werden sollte.

Um ein deutlicheres Beispiel zu nennen.

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

In Ihrem Fall haben Sie versucht, eine leere Zeichenkette als Ganzzahl zu analysieren.

Für das obige Float-Beispiel muss es zweimal umgewandelt werden.

>>> int(float('55063.000000'))
55063

176voto

Peter Punkte 1663

Die folgenden sind in Python völlig akzeptabel:

  • Übergabe einer String-Darstellung einer Ganzzahl an int
  • Übergabe einer String-Darstellung eines Floats an float
  • Übergabe einer String-Darstellung einer Ganzzahl an float
  • Übergabe eines Floats in int
  • Übergabe einer Ganzzahl in float

Aber Sie bekommen eine ValueError wenn Sie eine String-Repräsentation einer Schwimmer in int oder eine Zeichenkettendarstellung von etwas anderem als einer ganzen Zahl (einschließlich einer leeren Zeichenkette). Wenn Sie eine String-Repräsentation eines Floats an eine int Wie @katyhuff oben anmerkt, können Sie zuerst in eine Fließkommazahl und dann in eine Ganzzahl konvertieren:

>>> int('5')
5
>>> float('5.0')
5.0
>>> float('5')
5.0
>>> int(5.0)
5
>>> float(5)
5.0
>>> int('5.0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '5.0'
>>> int(float('5.0'))
5

75voto

SilentGhost Punkte 285785

Pythonische Art der Iteration über eine Datei und Konvertierung in int:

for line in open(fname):
   if line.strip():           # line contains eol character(s)
       n = int(line)          # assuming single integer on each line

Was Sie vorhaben, ist etwas komplizierter, aber immer noch nicht einfach:

h = open(fname)
for line in h:
    if line.strip():
        [int(next(h).strip()) for _ in range(4)]     # list of integers

Auf diese Weise werden jeweils 5 Zeilen verarbeitet. verwenden h.next() anstelle von next(h) vor Python 2.6.

Der Grund, warum Sie ValueError ist, weil int kann eine leere Zeichenkette nicht in eine Ganzzahl umwandeln. In diesem Fall müssen Sie entweder den Inhalt der Zeichenkette vor der Umwandlung überprüfen oder einen Fehler ausschließen:

try:
   int('')
except ValueError:
   pass      # or whatever

32voto

Brad123 Punkte 742

Ich habe einen Ausweg gefunden. Python wandelt die Zahl in eine Fließkommazahl um. Rufen Sie einfach float zuerst dann konvertieren, dass eine int funktionieren wird: output = int(float(input))

21voto

Joish Punkte 1240

Der Grund für diese Fehlermeldung ist, dass Sie versuchen, ein Leerzeichen in eine ganze Zahl umzuwandeln, was völlig unmöglich ist und nur eingeschränkt möglich ist. enter image description here

Überprüfen Sie Ihren Code und korrigieren Sie ihn, dann wird er funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X