Allgemeines Try: Except?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Purefranky
User
Beiträge: 8
Registriert: Montag 21. April 2008, 20:44

Allgemeines Try: Except?

Beitragvon Purefranky » Montag 21. April 2008, 21:30

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:")
   
   
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 21. April 2008, 21:34

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Dienstag 22. April 2008, 07:56

Das mit der Print-Statement-Expression solltest du dir aber nochmal überlegen ;)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 22. April 2008, 08:28

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 22. April 2008, 10:06

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...
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

Beitragvon C4S3 » Dienstag 22. April 2008, 10:48

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!
Gruß!
BlackJack

Beitragvon BlackJack » Dienstag 22. April 2008, 12:01

@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.

Wer ist online?

Mitglieder in diesem Forum: __deets__, Bing [Bot], Sirius3