Seite 1 von 1

Exception und int mit input einlesen

Verfasst: Freitag 18. Juni 2021, 12:43
von kalenderfamily
Hallo an alle,

ich bin IT Systemkaufmann und habe bisher eigentlich immer nur mit PHP gearbeitet, dazu ganz rudimentär JAVA, letzteres ist aber schon ein Weilchen her. Insgesamt "programmiere" ich nur hobbymäßig....

An einem Punkt komme ich nicht weiter und ich komme einfach nicht auf den Fehler....

Es soll ein ganz einfaches Zahlenraten auf Commandline Ebene ergeben, einen funktionierenden Code, der nur die Eingabe des Datentyps int erlaubt, habe ich:

while True:

Eingabe = input ("Bitte gib eine Ganzzahl ein....")

try:
EingabeZ = int(Eingabe)
#raise ValueError("Non numeric value")

# gibt einen TEXT und die eingegebene Zahl nochmal auf dem Bildschirm aus
Text="Deine eingegebene Zahl ist: "
print(Text, EingabeZ)

if ( ZufallsZ == EingabeZ ): print ("Glueckwunsch! Du hast Die Zufallszahl erraten!")

else: print ("Schade, die Zufallszahl war",ZufallsZ)

break

except :
print ('Du hast keine Ganzzahl eingegeben!')
continue
Jetzt würde ich gerne aber bereits int einlesen, nur das funktioniert

while True:

neueEingabe = int(input("Bitte gib eine Ganzzahl ein"))

try:

print(neueEingabe)

break

except: print ('Du hast keine Ganzzahl eingegeben!')
#continue

Re: Exception und int mit input einlesen

Verfasst: Freitag 18. Juni 2021, 13:57
von __deets__
Niemals nackte except-Klauseln benutzen, wenn man nicht weiss, was man macht. Fehler faengt man immer so spezifisch ab, wie es geht. Also in diesem Fall ein ValueError. Und Code bitte mit code-tags posten, dass ist der </>-Knopf im vollstaendigen Editor.

Zu guter letzt zu deinem Problem (ungetestet):

Code: Alles auswählen

while True:
    try:
        zahl = int(input("Bitte Ganzzahl eingeben"))
        break
    except ValueError:
        print("Fehlerhafte Eingabe")

Re: Exception und int mit input einlesen

Verfasst: Freitag 18. Juni 2021, 14:25
von kalenderfamily
Vielen Dank erstmal.

Wie eingangs erwähnt bin ich in Python kein Profi, im Programmieren auch nicht, code ab und an mal etwas, aber nicht Python.

Zu Exceptions habe ich ein paar Dinge gelesen, manches funktioniert, anderes nicht (auch abhängig von der Python Version)

Den Code habe ich probiert und erhalte dieselbe Fehlermeldung:

Code: Alles auswählen

invalid literal for int() with base 10: 'x'
Genau um diesen Fehler geht es.

Re: Exception und int mit input einlesen

Verfasst: Freitag 18. Juni 2021, 14:37
von __deets__
Das kann leider nicht sein, denn ich habe jetzt gerade die Moeglichkeit gehabt, das mal schnell auszuprobieren - meinen Code - und er tut exakt das, was er soll: jede Eingabe, die nicht in eine Ganzzahl ueberfuehrt werden kann, abzulehnen, mit Ausgabe der Fehlermeldung, und dann wieder um Eingabe zu bitten.

Und allgemein gilt: Geschichten ueber was wann mal wie wo nicht oder doch funktioniert hat, sind schoen, aber leider nur fuer Lagerfeuer-Abende geeignet. Bitte zeige konkreten Code und konkrete, dazu passende Fehlermeldung. Denn sonst kann man dazu nur mit den Achseln zucken.

Ich habe meinen Code mal aesthetisch etwas ueberarbeitet:

Code: Alles auswählen

while True:
    try:
        zahl = int(input("Bitte Ganzzahl eingeben: "))
        break
    except ValueError:
        print("Fehlerhafte Eingabe")

print("Eingegebene Zahl:", zahl)
Und so sieht das in der Benutzung aus:

Code: Alles auswählen

15:34 $ python3 /tmp/test.py 
Bitte Ganzzahl eingeben: abced
Fehlerhafte Eingabe
Bitte Ganzzahl eingeben: 10
Eingegebene Zahl: 10

Re: Exception und int mit input einlesen

Verfasst: Freitag 18. Juni 2021, 14:40
von kalenderfamily
Gerne, ich nutze einen online Compiler, ich poste den Screenshot

Bild

http://kalenderfamily.de/pubtemp/valuerror.png

Re: Exception und int mit input einlesen

Verfasst: Freitag 18. Juni 2021, 14:51
von __deets__
Du musst schon meinen Code nehmen, nicht irgendetwas selbst gemachtes, in dem der Code, der die Ausnahme ausloest (naemlich das int(...)) *VOR* der Ausnahmebehandlung steht. Dann funktioniert also sehr wohl, nur hast du halt nicht das ausprobiert, was ich geliefert habe 🤷‍♂️

Re: Exception und int mit input einlesen

Verfasst: Freitag 18. Juni 2021, 15:03
von kalenderfamily
Entschuldigung! Geht, ja, ich werde es mir auf jeden Fall nochmal genauer ansehen und meinen Code überarbeiten

Das mit den Blöcken ist auch so ne Umstellung....ich finde es mit { } einfach doch übersichtlicher...

Danke nochmal!

Re: Exception und int mit input einlesen

Verfasst: Freitag 18. Juni 2021, 15:11
von __deets__
Das hier findest du also uebersichtlicher?

Code: Alles auswählen

while (True) { try { zahl = int(input("Bitte Ganzzahl eingeben: ")); break } except(ValueError) { print("Fehlerhafte Eingabe") } } ; print("Eingegebene Zahl:", zahl)
Kann ich mir beim besten Willen nicht vorstellen. Jeder der in einer solchen Sprache programmiert, benutzt auch Einrueckungen. C, C++, Java, JavaScript, ALLE ruecken ein. Der Compiler braucht das nicht, aber der Mensch. Alles was Python macht ist zu sagen "dann wird's eben semantisch wichtig". Was in der Zwischenzeit diverse Sprachen nachmachen, weil der Mensch eben die Einrueckungen eh braucht.

Re: Exception und int mit input einlesen

Verfasst: Freitag 18. Juni 2021, 17:41
von kalenderfamily
Man muss ja nicht übertreiben, aber:

Code: Alles auswählen

while (True) { 

                          try { zahl = int(input("Bitte Ganzzahl eingeben: ")); break 
                          
                          } 

except (ValueError)  {  print("Fehlerhafte Eingabe") }

else {p print("Eingegebene Zahl:", zahl)}

Re: Exception und int mit input einlesen

Verfasst: Freitag 18. Juni 2021, 18:17
von sparrow
@kalenderfamily: Schönes Beispiel dafür, warum die Blockkennzeichnung durch Klammern fehleranfällig ist, wenn man nicht ordentlich einrückt: Wo ist denn die schließende Klammer für die Schleife? Auch mit Klammern ist korrente Einrückung super wichtig, um die Übersicht zu behalten. Und wenn man das ordentlich tut, ist man genau dort, wo man auch bei Python ist - nur mit unnützen Klammern.

Re: Exception und int mit input einlesen

Verfasst: Freitag 18. Juni 2021, 19:11
von kalenderfamily
Dann habe ich eine Klammer vergessen, finde ich persönlich jetzt nicht so schlimm, auf jeden Fall sieht man das offensichtlich ja auf den ersten Blick?

Vielen Dank für das Beispiel!

Wenn man falsch einrückt sieht man das im Standardnotepad eventuell nicht direkt?

Wer sagt eigentlich, dass man trotz Klammern nicht einrückt? Wie gleich Extreme - wie der Code oben - aufgefahren werden, mir unverständlich.

Re: Exception und int mit input einlesen

Verfasst: Freitag 18. Juni 2021, 20:15
von pillmuncher
kalenderfamily hat geschrieben: Freitag 18. Juni 2021, 19:11 Wer sagt eigentlich, dass man trotz Klammern nicht einrückt? Wie gleich Extreme - wie der Code oben - aufgefahren werden, mir unverständlich.
Schau dir mal das hier an: https://dwheeler.com/essays/apple-goto-fail.html

Eine der vorgeschlagenen Lösungen ist das Verbot falscher Einrückungen. Also das Gebot richtiger Einrückungen. Wozu dann aber überhaupt noch Klammern? Kurz gesagt: Mit Python-artigen Einrückungsregeln wär das nicht passiert.

Re: Exception und int mit input einlesen

Verfasst: Freitag 18. Juni 2021, 21:42
von sparrow
@kalenderfamily: Naja, du fragst, wer sagt, dass man Code mit Klammern nicht ordentlich einrücken kann und zeigst ja selbst, dass man es gerne nicht tut.
Und wie gesagt: wenn man eh vernünftig einrückt, sind die Klammern sowieso unnötig.

Re: Exception und int mit input einlesen

Verfasst: Freitag 18. Juni 2021, 22:30
von hyle
@kalenderfamily Als Lehrer solltest Du Vorbild sein und es selber *richtig* machen, bzw. den Schülern zeigen. ;) Ich glaube das ist ein guter Zeitpunkt für den Link zu Style Guide for Python Code (PEP8).