Dipende se è possibile gestire size < 0
nel punto in cui viene rilevato size < 0
.
Se si può gestire da subito a stampare, quindi print
, in caso contrario, sollevare un'eccezione, di delegare la gestione di tale condizione a qualcosa di più in alto lo stack di chiamate, in questo modo:
def divide_three_by(val):
if val == 0:
raise ValueError("Can't divide by 0")
return 3/val
try:
divide_three_by(some_value_from_user)
except ValueError:
print "You gave stupid input"
In (esempio molto forzato) sopra, la funzione divide_three_by
non sa cosa fare se si passa 0 - a volte si potrebbe semplicemente voler stampare un messaggio (es. se val
proviene da input dell'utente), a volte si potrebbe voler semplicemente ignorarlo e assegna un valore predefinito. Dato che la funzione non sa cosa fare, dovrebbe passare la responsabilità di gestire tale condizione sul callstack a quello che ha chiamato (e se non può essere gestita lì, continuerà a essere passata al callstack fino a quando qualcosa lo maneggia , o finché non raggiunge il livello più alto, a quel punto il tuo programma terminerà).
Per ulteriori informazioni sulla gestione delle eccezioni in Python, dai un'occhiata allo Errors and Exceptions tutorial nella documentazione di Python.
fonte
2010-01-27 12:04:13
Quando hai provato questo codice, quali differenze hai osservato? –