Python Frage zu While Schleife bzw. zu try / except?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Meinst du mit "etwas falsches" dass keine Zahl eingegeben wird? Dafür muss der betreffende Code - also der input bzw. die Typkonvertierung - auch innerhalb des try-Blocks stehen. Wenn du die Zeile, in der "option" definiert wird also einfach eine Zeile weiter runter schreibst wird es funktionieren...

Du hast dann aber nur das abgefangen, was nicht in einen Integer konvertierbar ist. Für zu große oder zu kleine Zahlen würde sich dann ein else-Block anbieten...

Woher ich das weiß:Hobby – Programmiere seit eineinhalb Jahren
DNSxxx 
Fragesteller
 09.09.2021, 21:26

Das ist ja nur ein Beispiel. Der Code in dem ich das Problem habe ist viel zu lang um ihn hier zu schreiben.

In diesem Beispiel (das ich vermute was etwas ähnlichkeit mit meinem Problem hat) hab ich das so gemeint:

Zuerst kommt die Frage:

1, 2 oder 3

Da gebe ich dann 1 ein (was ja richtig ist und zu option 1führt.

Dann kommt die Frage:

Gib eine Zahl eine!

Da geht es jetzt nicht speziell um einen Integer-Fehler im Orginal-Code. Das ist nur ein einfaches Beispiel wie man einen Fehler erzeugt.

Wenn ich da jetzt keine Zahl eingebe, sondern z.b. ein "a", dann dachte ich dass der except-Block mit dem ValueError oder der BaseException kommt und dann der jeweilige String mit der Variable "err" ausgegeben wird und dann weiß ich nicht, aber auf jeden Fall dachte ich dass das Programm da dann nicht abstürzt, weil man ihn mit except abgefangen hat.

Kannst du mir da sagen wo mein Denkfehler liegt?

1
Kaktus258  09.09.2021, 21:49
@DNSxxx

Ja, wie gesagt kannst du den Fehler nicht abfangen, wenn der betreffende Code außerhalb des try-blocks ist... Das, wo der Fehler auftritt (in diesem Fall die Konvertierung eines Strings in einen Integer) muss innerhalb eines Try-blockes sein, anderenfalls kann es nicht abgefangen werden...

2
DNSxxx 
Fragesteller
 09.09.2021, 21:56
@Kaktus258

Also müsste ich um die if's jeweils nochmal einen try except Block machen.

So wie der Code jetzt ist kann es also gar nicht dazu kommen dass eines der except ausgelöst wird, oder? Sehe ich das richtig?

1
Kaktus258  09.09.2021, 22:35
@DNSxxx
Also müsste ich um die if's jeweils nochmal einen try except Block machen.

Nein, die sind ja schon im try-block. Das einzige was du tun musst ist, die Zeile, in der du die Konvertierung vornimmst - in diesem Fall die vierte - mit in den try-Block zu nehmen. In dieser Zeile entsteht der Fehler, und nur wenn der Fehler innerhalb eines Try-Blockes entsteht, kann er abgefangen werden. Es müsste also so aussehen:

if __name__ == '__main__':
    while_option = True
    while while_option:
        try:
            option = int(input('1, 2 oder 3')) # Hier entsteht der Fehler. Deshalb muss diese Zeile innerhalb des Try-Blocks sein
            if option == 1:
                print("option 1")
                a = int(input('Gib eine Zahl ein!'))
             [...]
So wie der Code jetzt ist kann es also gar nicht dazu kommen dass eines der except ausgelöst wird, oder? Sehe ich das richtig?

Es könnte ein catch-Block ausgelöst werden, jedoch nur wenn ein entsprechender Fehler innerhalb des zugehörigen Try-Blockes entsteht. Und bei dem Code der jetzt im Try-Block steht ist das nicht möglich, genau (weil der sensible Code darüber steht)...

1