try und except Problem - wieder mal eine Anfängerfrage

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
Cortez
User
Beiträge: 115
Registriert: Montag 31. Dezember 2018, 15:28

Was habe ich hier nicht beachtet? Bekomme einen unindent does not match any outer indentification Fehler.
while True:
for i in range(0, len(self.Werte)):
print (("Wert Nr. "), (i+1), ("= "), (self.Werte))
edit = input ("Welchen Wert bearbeiten?")
if edit == "b":
break

try: int(edit)


while edit <0 or edit >len(self.Werte)
edit = input ("Bitte einen vorhandenen Wert eingeben")
self.Werte.pop(edit-1)
wertneu = eval(input("Bitte neuen Wert eingeben"))
self.Werte.insert(edit-1, wertneu)
print (self.Werte)

except ValueError: print ("Bitte eine Zahl eingeben")


Vielen Dank für eure Hilfe!
Benutzeravatar
sparrow
User
Beiträge: 4599
Registriert: Freitag 17. April 2009, 10:28

Der Fehler bedeutet, dass die (für Python fundamental wichtige) Einrückung nicht überall gleich ist.

Wenn du hier im Forum die Code-Tags benutzt, dann kann man die Einrückung auch sehen.

Rück einfach pro Ebene mit 4 Leerzeichen ein. Keine 8 und auch nicht per Tabulator. Und suche die Stelle, wo du anders einrückst (steht ja bei der Fehlermeldung).

Und hinter einem try: steht nichts in einer Zeile. Das muss dann in einem eingerückten Block stehen.
Ebenso bei except:
Und bei while fehlt mindestens der Doppelpunkt.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

Der spezielle fehler ist, dass Du nach `try:` keine neue Zeile angefangen hast und damit Python denkt, es kommt kein Block mehr. Auch sonst sind die Einrückungen nicht korrekt.

for mit range ist ein Antipattern, da man direkt über die Elemente der Liste iterieren kann, braucht man zusätzlich einen Index nimmt man enumerate. Die Argumente von `print` haben viel zu viele Klammern und vor der Klammer eines Funktionsaufrufs schreibt man kein Leerzeichen.
`int` gibt einen Wert zurück, den Du einer Variable zuweisen mußt.
`eval` sollte man nicht benutzen. pop und insert zusammen wäre einfach nur eine Zuweisung.

Code: Alles auswählen

while True:
    for i, value in enumerate(self.Werte, 1):
        print("Wert Nr. {} = {}".format(i, value))
    edit = input("Welchen Wert bearbeiten?")
    if edit == "b":
        break
                
    try:
        edit = int(edit)
        while not 0 < edit <= len(self.Werte) 
            edit = int(input("Bitte einen vorhandenen Wert eingeben"))
        wertneu = int(input("Bitte neuen Wert eingeben"))
        self.Werte[i] = wertneu
        print(self.Werte)
    except ValueError:
        print("Bitte eine Zahl eingeben")
Benutzeravatar
Perlchamp
User
Beiträge: 178
Registriert: Samstag 15. April 2017, 17:58

@ sirius3:
warum benutzt du keinen f-string? Ist doch übersichtlicher:

Code: Alles auswählen

for i, value in enumerate(self.Werte, 1):
        print(f'Wert Nr. {i} = {value}')
EDIT:
Option 'mich benachrichtigen' aktiviert
Irgendwas ist immer !
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Benutzeravatar
sparrow
User
Beiträge: 4599
Registriert: Freitag 17. April 2009, 10:28

Weil es f-Strings erst seit Python 3.6 gibt, während .format bereits seit einer Ewigkeit existiert.
Cortez
User
Beiträge: 115
Registriert: Montag 31. Dezember 2018, 15:28

Danke für eure Hilfe. Die Einrückungen waren in der Tat nicht korrekt. Habe nochmal neu gecoded und auch den Hinweis mit dem try beachtet - jetzt funktionierts :)
Benutzeravatar
Perlchamp
User
Beiträge: 178
Registriert: Samstag 15. April 2017, 17:58

@ sparrow:
ich wollte keine Eitelkeiten verletzen, das steht mir nicht zu. Ich bin Anfänger, deshalb habe ich gefragt ... auf dem neuesten Stand zu sein (ich kenne als Neuling nun mal keinen anderen) ist ja kein 'Verbrechen', oder ?
Und ich kann es nicht oft genug wiederholen:
Danke für all eure Geduld, sich mit solchen Anfängern, wie mir, 'abzugeben', und mir geduldig bei der Lösung meiner Probleme zu helfen, danke !
Ebenso war meine Frage in keinster Weise despektierlich gemeint oder provokativ angehaucht, sondern rein zur Kontrolle meines Wissensstandes.
Irgendwas ist immer !
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Antworten