Ich habe einige Funktionen, die in einer Kette aufgerufen werden, auf der ich try/except-Blöcke einführen muss, um mit Ausnahmen umzugehen, die aus einer Bibliothek stammen, die ich verwende.Try/Blocks Ausnahmen in einer aufgerufenen Funktion
Ich versuche zu verstehen, wenn diese sicher ist, genauer gesagt, wenn wir immer erwarten, dass ein Try/außer Block nicht tiefen Versuch sieht/except Blöcke in dem Fluss der Ausführung:
def level_two_function():
try:
return a[i]
except:
return "Exception at level 2"
def level_one_function():
try:
return level_two_function()
except:
return "Exception at level 1"
level_one_function() # 'Exception at level 2'
die versuchen/außer Block von in jedem Zustand sieht es jemals eine Ausnahme ausgelöst von level_two_function
?
Wie ist das Verhalten im Vergleich zu der folgenden Situation?
def work(token, restrictions):
def loop(token):
if token.text in restrictions:
try:
return loop(token.nbor())
except IndexError:
return token
else:
return token
try:
start = token.nbor()
return loop(start)
except IndexError:
# if it has no neighbor just return it
return token
Hier gibt es keine Rekursion; Nirgends nennt sich eine dieser Funktionen selbst. Nicht, dass die Antwort für einen rekursiven Aufruf jedoch anders wäre. –
Ich weiß, ich habe nur ein Beispiel mit einer verschachtelten Ebene zur Verfügung gestellt. Also gilt die Rückgabe Ausnahme nur in einem rekursiven Aufruf? –
Nein, es spielt keine Rolle, ob der Aufruf rekursiv ist oder nicht. –