Seite 1 von 1

Listenspielereien - Value Error Problem

Verfasst: Dienstag 4. Oktober 2011, 18:27
von mcdaniels
Hallo Leute!
Habe heute an folgendem Code gebastelt. ich wollte mit Listen spielen. D.h. Das Programm tut nichts andres als eine Liste zu erstellen, die Listeinträge auszugeben bzw zu zählen und zu guter Letzt hat man die Möglichkeit, sich einen beliebigen Listeintrag anzeigen zu lassen. Soweit so gut. Hier mal der Code dazu:

Code: Alles auswählen

# -*- coding: utf-8 -*-
print 'Listen und was man damit alles anstellen kann...'
print 'Daten zu einer leeren Liste hinzufügen'
liste = []
while True:
      eintrag = raw_input('Geben Sie Listeneinträge ein:')
      if eintrag == "":
            break
      else:
            liste.append(eintrag)

print 'Danach die Liste ausgeben'
print liste
print ''
print 'Die Listenelemente zählen'
eintraege = len(liste)
print 'Die Liste hat ', eintraege, ' Listeinträge'
print ''
print 'Oder aber, bestimmte Listeinträge anzeigen:'
while True:
      try:
            eintragnr = int(raw_input('Listeintrag Nr    keine Eingabe = Ende :'))
            if eintragnr  >  eintraege - 1:
                  print 'Eintrag nicht vorhanden'
                  print 'Letzter Eintrag ist Nr: ',  eintraege
                  continue
      except ValueError:
                  break
           
      print 'Der Eintrag lautet:',  liste[int(eintragnr)]

Bei der 2ten while-Schleife hatte ich zuerst keinen try / except Konstrukt, sondern alles mit der If-Abfrage geregelt.

Der Block hat so ausgeschaut:

Code: Alles auswählen

while True:
         eintragnr = int(raw_input('Listeintrag Nr    keine Eingabe = Ende :'))
         if eintragnr  >  eintraege - 1:
               print 'Eintrag nicht vorhanden'
               print 'Letzter Eintrag ist Nr: ',  eintraege
               continue
         if eintragnr == "":
               break
         else:
              print 'Der Eintrag lautet:',  liste[int(eintragnr)
Hier allerdings verursachte ein einfaches Return (bei Input der eintragnr) welches eigentlich der if Abfrage if eintragnr == "" entspricht einen ValueError.
Genaue Meldung: ValueError: invalid literal for int() with base 10.

D.h. eine Leereingabe ist bei einer Variable des Types int nicht möglich?
Danach hab ich eben diesen ValueError hergenommen um ihn mittels try except abzufangen.

Wie könnte man das ohne try/except lösen?

LG
Daniel

Re: Listenspielereien - Value Error Problem

Verfasst: Dienstag 4. Oktober 2011, 18:35
von lunar
@mcdaniels: Was sollte den eine „Leereingabe“ bei einer Zahl sein?!

Lösen kannst Du das wie folgt:

Code: Alles auswählen

response = raw_input('...').strip()
if not response.isdigit():
    break
else:
    number = int(response)

Re: Listenspielereien - Value Error Problem

Verfasst: Dienstag 4. Oktober 2011, 18:38
von mcdaniels
Hallo!
Mit Leereingabe meine ich, wenn man eben nichts eingibt, sondern einfach mit Return bestätigt. Somit wäre ja die Variable eintragnr ="", hab ich mir zumindest gedacht.

LG
Daniel

Re: Listenspielereien - Value Error Problem

Verfasst: Dienstag 4. Oktober 2011, 19:41
von BlackJack
@mcdaniels: Nein das wäre es nicht. Die Rückgabe von `raw_input()` ist dann die leere Zeichenkette. Aber die wird dann ja der `int()`-Funktion übergeben. Und was sollte *die* aus einer leeren Zeichenkette für eine Zahl machen!? Das repräsentiert halt keine Zahl, also gibt's den `ValueError`.

Code: Alles auswählen

In [109]: int('')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)

/home/bj/<ipython console> in <module>()

ValueError: invalid literal for int() with base 10: ''

Re: Listenspielereien - Value Error Problem

Verfasst: Mittwoch 5. Oktober 2011, 07:26
von mcdaniels
Danke!
Hab wohl gestern den Wald vor lauter Bäumen nicht mehr gesehen :-)