Listenspielereien - Value Error Problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

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
Zuletzt geändert von mcdaniels am Dienstag 4. Oktober 2011, 18:36, insgesamt 1-mal geändert.
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)
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

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
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: ''
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

Danke!
Hab wohl gestern den Wald vor lauter Bäumen nicht mehr gesehen :-)
Antworten