Seite 1 von 1

functions terminated with exceptions

Verfasst: Sonntag 17. April 2005, 17:27
von be_veronic
Weisst jemand wie kann ich Funktionen die mit eine Exception von den ganz normalen die mit return beenden unterscheiden?

Danke im voraus.

Verfasst: Montag 18. April 2005, 00:00
von BlackJack
Irgendwie kann ich den Satz nicht richtig parsen. Und wo kommt der Titel her? Ist das eine Fehlermeldung, die Du irgendwo bekommst?

Ansonsten kann man eine Funktion die nicht mit ``return`` beendet wurde, sondern eine Ausnahme ausgelöst hat, eben an dieser Ausnahme erkennen.

Verfasst: Dienstag 19. April 2005, 13:01
von Gast
Hi BlackJack,

Also, ich arbeite mit den inspect module und ich will erkennen wenn eine Funktion mit eine Exception beendet.Also falls man event=='call' oder 'return' hat, dann ist ok,aber wenn man event='exception' hat wie kann ich unterscheiden dass ich eine behandelte Exception habe oder nicht?

Danke.

Verfasst: Dienstag 19. April 2005, 13:45
von BlackJack
Das kannst Du gar nicht erkennen. Was ist denn zum Beispiel bei folgendem Quelltext:

Code: Alles auswählen

def spam(n):
    if n < 0:
        raise ValueError('n must be positive')
    else:
        return n * 2
Ist das eine Funktion die "normal" endet oder eine die in einer Ausnahme endet?

Ausserdem können in einer Funktion auch weitere Funktionen aufgerufen werden die auch eine Ausnahme auslösen können. Und ein `MemoryError` kann so gut wie immer auftreten.

Verfasst: Dienstag 19. April 2005, 14:13
von be_veronic
Hi BlackJack,

Ok,du lässt dein Skript laufen und dein Fuktion wenn n<0 ist
def spam(n):
if n < 0:
raise ValueError('n must be positive')
else:
return n * 2
kann mit den Exception ValueError beenden,und dass genau will ich erkennen,wenn kein return erreichbar ist.Was ich zu machen will ist den Trace von eine Funktion f1 Z.B
call f1
| call f2
| | call f3
Exception in f3 aufgetreten,die nicht behandelt ist
| | done f3
| done f2
done f1

indent= "| " wenn event=="call" indent=indent+1
event="return" indent=indent-1
event = "exception" wenn es behandelt ist, kein problem weil den return noch erreichbar ist, aber wenn nicht dann muss ich indent=indent-1 machen.Also wie kann ich sehen dass den Exception den Funktion f3 beendet????

Danke.

Verfasst: Dienstag 19. April 2005, 21:32
von BlackJack
Ach Du möchtest das zur Laufzeit herausfinden, wenn tatsächlich eine Ausnahme ausgelöst wurde!?

Dann schau mal ob in den Modulen traceback oder inspect Funktionen zu finden sind, mit denen Du das gewünschte basteln kannst.

Ansonsten habe ich glaube ich immer noch nicht verstanden, was Du genau machen möchtest.