Verbesserungsvorschläge - Try Except handling

Code-Stücke können hier veröffentlicht werden.
Antworten
crazyyzarc
User
Beiträge: 27
Registriert: Freitag 10. Juli 2015, 21:08
Wohnort: PyLand

Sonntag 19. April 2020, 12:45

Hallo Zusammen,

da ich immer mehr und mehr in das Thema der Funktionen rein komme eröffnet es mir auch das dauernde hinzufügen des try except blocks, welches falsche EIngaben abfängt.
Sollte ich mal anderen mein Programm benutzen lassen, die eben nicht wissen was eingegeben werden kann und was nicht: Hier will ich dann bereits überall vorsichtsmaßnahmen treffen um das vorzeitige Beenden des Programms zu verhindern. Wenn ich dann aber viele FUnktionen integriert habe die jeweils immer Eingaben erfordern dann muss ich ja jeweils immer mein Konstrukt hierfür nutzen was die Lesbar beeinflusst.

Kurz und knapp: wie handhabt ihr das error handling in Funktionen? Könnte man das Error handling zentral in einer weiteren Funktion auslagern um es nur einmal defineiren zu müssen?

Im Grunde bewirke ich mit meiner while Schleife, dass in jedem Fall eine korrekte Eingabe erfolgt wird und erst dann der weitere Programmcode ausgeführt wird.

Mein übliches handling sieht so etwas aus:

Code: Alles auswählen

check_input = True

while check_input:
    try:
           
            guess_num = int(input("Rate die Zahl: "))

            # Some other stuff
            
            if guess_num == random_num:
                check_input = False

    except ValueError:
        print("\n|> Falscher Datentyp\n")
        
 else:
     print("Glückwunsch")
Sirius3
User
Beiträge: 14207
Registriert: Sonntag 21. Oktober 2012, 17:20

Sonntag 19. April 2020, 12:53

Man muß halt dort Exceptions abfangen, wo man sie sinnvoll behandeln kann. Wenn Du an mehreren Stellen ähnlichen Code hast, kannst Du den auch in eine Funktion auslagern.

Dein übliches handling behandelt zu viel. Nur das Umwandeln von String in Int kann zu einem ValueError führen. So eine Eingabe kannst Du in eine Funktion auslagern:

Code: Alles auswählen

def input_int(prompt):
    while True:
        try:
            return int(input(prompt))
        except ValueError:
            print("Bitte Zahl eingeben.")


while True:
    guess_num = input_int("Rate die Zahl:")
    if guess_num == random_num:
        break
    print("Falsch geraten")
print("Glückwunsch")
crazyyzarc
User
Beiträge: 27
Registriert: Freitag 10. Juli 2015, 21:08
Wohnort: PyLand

Sonntag 19. April 2020, 13:31

Sirius3 hat geschrieben:
Sonntag 19. April 2020, 12:53
Man muß halt dort Exceptions abfangen, wo man sie sinnvoll behandeln kann. Wenn Du an mehreren Stellen ähnlichen Code hast, kannst Du den auch in eine Funktion auslagern.

Dein übliches handling behandelt zu viel. Nur das Umwandeln von String in Int kann zu einem ValueError führen. So eine Eingabe kannst Du in eine Funktion auslagern:

Code: Alles auswählen

def input_int(prompt):
    while True:
        try:
            return int(input(prompt))
        except ValueError:
            print("Bitte Zahl eingeben.")


while True:
    guess_num = input_int("Rate die Zahl:")
    if guess_num == random_num:
        break
    print("Falsch geraten")
print("Glückwunsch")
Genau nach solchem Ansatz habe ich gesucht! Vielen Dank =)
Antworten