Seite 1 von 1

try und except Problem - wieder mal eine Anfängerfrage

Verfasst: Sonntag 24. Februar 2019, 13:37
von Cortez
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!

Re: try und except Problem - wieder mal eine Anfängerfrage

Verfasst: Sonntag 24. Februar 2019, 14:25
von sparrow
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.

Re: try und except Problem - wieder mal eine Anfängerfrage

Verfasst: Sonntag 24. Februar 2019, 17:13
von Sirius3
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")

Re: try und except Problem - wieder mal eine Anfängerfrage

Verfasst: Sonntag 24. Februar 2019, 17:23
von Perlchamp
@ 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

Re: try und except Problem - wieder mal eine Anfängerfrage

Verfasst: Sonntag 24. Februar 2019, 19:18
von sparrow
Weil es f-Strings erst seit Python 3.6 gibt, während .format bereits seit einer Ewigkeit existiert.

Re: try und except Problem - wieder mal eine Anfängerfrage

Verfasst: Sonntag 24. Februar 2019, 20:08
von Cortez
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 :)

Re: try und except Problem - wieder mal eine Anfängerfrage

Verfasst: Sonntag 24. Februar 2019, 20:13
von Perlchamp
@ 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.