Рассмотрим два сценария:
try:
foo()
bar()
except:
baz()
try:
foo()
except:
baz()
else:
bar()
В первом случае baz() вызовется, если было выброшено исключение в foo() или в bar().
Во втором случае baz() вызовется, если было выброшено исключение в foo(), а исключения в bar() останутся необработанными.
В обоих случаях bar() вызовется только если foo() отработало без исключений.
Какой из двух способов применять, зависит от нужного тебе поведения.
Насчёт finally ответили выше. Обычно finally применяется в ситуациях, когда тебе обязательно нужно выполнить какое-то действие по окончании операции, независимо от её исхода. Например, если ты открыл файл, тебе обязательно нужно его закрыть, когда ты с ним больше не работаешь, и тому подобное.