Fehler, Validierung und Fehlersuche · Übung
Validiere vor dem Umwandeln
Bevor int() Text umwandelt, kann ein Programm die erwartete Form prüfen. Diese Lektion akzeptiert gewöhnliche Tastaturziffern von 0 bis 9. Die Stringmethode .isdigit() ist eine einfache erste Prüfung für diese bewusst eng gefasste Anforderung.
Betrachte eine Eingabeaufforderung für eine Sitzplatznummer:
while True:
answer = input("Seat number: ")
if answer.isdigit():
seat = int(answer)
break
print("Please enter digits only.")
print(f"Seat: {seat}")
Die Reihenfolge ist wichtig:
input()liefert einen String..isdigit()validiert diesen String.int()wird erst nach erfolgreicher Validierung ausgeführt.breakverlässt die Schleife mit einer gültigen ganzen Zahl.
Wenn die Antwort ungültig ist, wird die Umwandlung übersprungen. Die Meldung wird ausgegeben, und der nächste Schleifendurchlauf fragt erneut.
Verfolge zwei Versuche
Wenn die Antworten zuerst front und dann 12 lauten, sieht der Ablauf so aus:
| Versuch | answer.isdigit() | Aktion |
|---|---|---|
"front" | False | Hinweis ausgeben und wiederholen |
"12" | True | in 12 umwandeln und die Schleife verlassen |
Das Programm übergibt "front" nie an int(). Deshalb kann diese Eingabe keinen ValueError auslösen.
Validiere die Regel, die du tatsächlich brauchst
Für die hier verwendeten gewöhnlichen Ziffern von 0 bis 9 akzeptiert .isdigit() Beispiele wie "0" und "27". Es lehnt Folgendes ab:
negative Zahlen wie
"-2";Dezimalzahlen wie
"3.5";Vorzeichen wie in
"+4";Wörter wie
"many".
Ein leerer String besteht diese Prüfung ebenfalls nicht. Auch umgebende Leerzeichen führen zur Ablehnung, weil dieses Beispiel die Antwort nicht bereinigt.
Diese Übung verwendet gewöhnliche Tastaturzeichen. Einige andere Ziffernzeichen wie "²" bestehen die Prüfung mit .isdigit(), führen bei int() aber trotzdem zu einem ValueError. Daher ist .isdigit() hier eine nützliche erste Prüfung, jedoch keine Garantie, dass jeder mögliche String umgewandelt werden kann.
Das ist hilfreich, wenn die Anforderung innerhalb dieser begrenzten Eingabemenge wirklich nur Ziffern lautet. Es ist keine vollständige Prüfung für jeden Wert, den int() versteht. Die nächsten Lektionen führen try und except ein. Damit lässt sich Python selbst fragen, ob eine Umwandlung in eine ganze Zahl funktioniert.
Gib hilfreiche Hinweise für den nächsten Versuch
Eine Fehlermeldung sollte Lernenden oder Nutzern helfen, beim nächsten Versuch eine gültige Eingabe zu machen. „Invalid“ ist vage. „Please enter digits only.“ nennt das erwartete Format: Es dürfen nur Ziffern eingegeben werden.
Lass die Eingabeaufforderung innerhalb der Schleife. Andernfalls könnte das Programm seine Prüfung endlos wiederholen, ohne eine neue Antwort einzulesen.
Der Nutzer gibt zuerst many und dann 3 ein. Wie oft ruft dieses Programm int() auf?
while True:
text = input("Count: ")
if text.isdigit():
count = int(text)
break
print("Digits only.")
Aufgabe
Erstelle eine Eingabeaufforderung für eine Ticketanzahl, die bei ungültigen Antworten erneut fragt. In dieser Übung verwenden die Antworten gewöhnliche Tastaturzeichen. Gültige Antworten enthalten nur 0 bis 9. Prüfe jede Antwort vor der Umwandlung mit .isdigit().
Verwende bei jedem Versuch diese Eingabeaufforderung:
Number of tickets:
Wenn die Antwort etwas anderes als Ziffern enthält, gib Folgendes aus:
Please enter digits only.
Frage dann erneut. Sobald die Antwort ausschließlich aus Ziffern besteht, wandle sie in eine ganze Zahl um, verlasse die Schleife und gib Folgendes aus:
Tickets: 7
Die vorbereiteten Testdaten geben zuerst many, dann -2 und zuletzt 7 ein. Dein Programm muss die ersten beiden Antworten ablehnen, ohne zu versuchen, sie umzuwandeln.