Zależy, czy można obsłużyć size < 0
w punkcie, w którym wykryto size < 0
.
Jeśli można obsługiwać go przez drukowanie od razu, wtedy print
, w przeciwnym razie wyjątek, aby powierzyć obsługę takim stanie do czegoś dalszej callstack, tak:
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"
w (wprawdzie bardzo wymyślony) powyższy przykład, funkcja divide_three_by
nie wie, co zrobić, jeśli przekazujesz 0 - czasami możesz po prostu chcieć wydrukować wiadomość (np. jeśli val
pochodzi z danych wprowadzonych przez użytkownika), czasami możesz po prostu zignorować to i przypisz wartość domyślną. Ponieważ funkcja nie wie, co zrobić, powinna przejąć odpowiedzialność za obsługę tego stanu w zależności od tego, co ją wywołało (i jeśli nie będzie można jej tam obsłużyć, będzie ona przekazywana dalej do stanu wywołania, dopóki coś jej nie obsłuży lub dopóki nie osiągnie najwyższego poziomu, w którym to momencie program się zakończy).
Aby uzyskać więcej informacji na temat obsługi wyjątków w języku Python, zapoznaj się z dokumentacją Errors and Exceptions tutorial w dokumentacji Pythona.
Kiedy próbowałeś tego kodu, jakie różnice zaobserwowałeś? –