Python Division durch 0 Fehler
Ich bin derzeit mit diesem Python-code:
valid_chars = "0123456789-+/* \n";
while True:
x = "x="
y = input(" >> ")
x += y
if False in [c in valid_chars for c in y]:
print("WARNING: Invalid Equation");
continue;
if(y == "end"):
break
exec(x)
print(x)
Stürzt es ab, wenn der Benutzer etwas wie dieses: 9/0. Fehler:
ZeroDivisionError: division by zero
Was sind einige Möglichkeiten, die verhindern, dass Nutzer aus der Division etwas durch null?
- Also das ist Python 3, wo
input()
nur gibt den string zurück, den der Benutzer eingegeben, und Sie versuchen, zu verwendenexec()
um den Ausdruck auszuwerten die Benutzer eingetragen? Ihre Nachrichten sollten unterscheiden zwischen den Umständen, sonst werden Sie einfach nicht wissen, welcheprint
- Anweisung ausgeführt wird. - Ich fixiert, dass, aber Dank der für mich zu sagen
- Die Antworten sind jetzt nutzlos, und dieser ganze thread ist sinnlos, und niemand es zu Lesen in der Zukunft davon profitieren können, weil Sie genommen haben, das Problem aus der Frage. Also, wer sieht dies in der Zukunft nicht in der Lage sein zu wissen, wenn die Frage ist die gleiche, die Sie haben. Bitte kehren Sie zur Frage zurück zu seiner früheren Zustand, wo Ihr Problem war mehr ersichtlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie außer der
ZeroDivisionError
wie dieseWenn du mit Python 2.x, die input-Daten werden hier ausgewertet selbst
so, in Python 2.x, Sie sollten mit
Abgesehen davon, Sie können verbessern dieses Stück code
wie diese
Als @gnibbler, schlug in den Kommentaren die gleiche if-Bedingung kann wie folgt geschrieben werden
Ein weiterer Vorschlag wäre, keine Notwendigkeit zu verwenden semi Doppelpunkte markieren das Ende der Zeile in Python 🙂
if any(c not in valid_chars for c in y):
ist eine andere Art zu sagen, esKapseln den code mit einem try-except
Der Grund ist der Eingang() ausgewertet wird, wie es gelesen wird, bevor y festgelegt ist. Damit die Ausnahme tritt auf, weil der input () - und muss gefangen werden, mit dem versuchen:
.
Das eigentliche problem ist, dass Sie die Ausführung
exec()
zweimal. Das erste mal, wenn Sie führen Sie auf die Zeichenfolge, die Sie konstruiert haben, und diese ersetzt den Wert x mit dem Ergebnis des eingegebenen Ausdrucks. Also das zweite mal, Sie werden vermutlich versuchen zu laufenexec(64)
. Schauen Sie genauer auf die Logik Umströmungtry: ... except: ... else
.Die einfachste Lösung ist, um mit zu beginnen
und drucken Sie dann
z
eher alsx
. Dies sollte Sie nicht davon abhalten arbeiten zu vermeiden, die dupliziert Ausführung des Codes.