Seite 1 von 1

Allgemeines Try: Except?

Verfasst: Montag 21. April 2008, 21:30
von Purefranky
Hi Leute, fang grad an in Python, bin aber im Programmieren an sich schon erfahren.

Nur die Python-Syntax und dinge, die es in PureBasic nich gibt, sind teils neu für mich.

Zur Frage:
Wie kann ich am einfachsten einen allgemeinen Fehler abfangen, bzw. was müsste ich verändern, um folgenden Code absturzsicher zu behalten?

Code: Alles auswählen

from math import *
text=input("Geben sie eine Rechnung ein:")
while text<>"is gut nu":
    try:
        erg=eval(str(text))
    except BaseException:
        erg=str("Invalid Syntax")
    print erg
    text=input("Geben sie eine Rechnung ein:")
    
    

Verfasst: Montag 21. April 2008, 21:34
von Leonidas
Hallo Purefranky, willkommen im Forum,

Besser so:

Code: Alles auswählen

import sys
from math import *

text = raw_input("Geben sie eine Rechnung ein:")
while text != "is gut nu":
    try:
        erg = eval(text)
    except Exception:
        erg = print >>sys.stderr, "Invalid Syntax"
    print erg
    text = raw_input("Geben sie eine Rechnung ein:")
Aber natürlich ist das nicht absturzsicher, vor allem wenn du ``eval()`` nutzt gibst du alle Sicherheiten weg.

Verfasst: Dienstag 22. April 2008, 07:56
von birkenfeld
Das mit der Print-Statement-Expression solltest du dir aber nochmal überlegen ;)

Verfasst: Dienstag 22. April 2008, 08:28
von jens
Mein Vorschlag:

Code: Alles auswählen

import sys
from math import *

while True:
    text=raw_input("Geben sie eine Rechnung ein (Abbruch mit Strg-C):")
    try:
        erg=eval(str(text))
        print "Ergebniss:", erg
    except KeyboardInterrupt:
        print "ende"
        sys.exit()
    except Exception, e:
        print "Fehler:", e
Wichtig ist, raw_input statt input nehmen!
Generell ist aber eval nicht zu empfehlen, siehe: http://www.python-forum.de/topic-14044.html

Verfasst: Dienstag 22. April 2008, 10:06
von Leonidas
birkenfeld hat geschrieben:Das mit der Print-Statement-Expression solltest du dir aber nochmal überlegen ;)
Ups, Code in einem Textarea zu schreiben führt nur zu Blödsinn, ich seh schon...

Verfasst: Dienstag 22. April 2008, 10:48
von C4S3
Nur die Python-Syntax und dinge, die es in PureBasic nich gibt, sind teils neu für mich.
Ha, ein weiterer Überläufer. Willkommen im Club!

Verfasst: Dienstag 22. April 2008, 12:01
von BlackJack
@Purefranky: Du solltest Dir auf jeden Fall ``!=`` anstelle von ``<>`` angewöhnen, weil das in Python 3.0 raus fliegt.

Ausserdem wäre hier eine Endlosschleife (``while True:``) besser, die bei der entsprechenden Bedingung dann mit ``break`` verlassen wird. Dann spart man sich nämlich die Zuweisung an `text` mit dem gleichen Ausdruck auf der linken Seite an zwei Stellen im Programm und muss den Ausdruck nur noch einmal pflegen.

Gern gesehen werden auch Leerzeichen vor und nach binären Operatoren und Zuweisungen. Dann ist der Quelltext leichter zu lesen.