Было сказано в пару мест (здесь и здесь), что акцент Python на "это проще просить прощения, кроме разрешения" (EAFP) следует отбросить мысль о том, что исключения следует вызывать только в действительно исключительных случаях. Рассмотрим следующее, в котором мы выходим и нажимаем очередь приоритетов, пока не останется только один элемент:
import heapq
...
pq = a_list[:]
heapq.heapify(pq)
while True:
min1 = heapq.heappop(pq)
try:
min2 = heapq.heappop(pq)
except IndexError:
break
else
heapq.heappush(pq, min1 + min2)
# do something with min1
Исключение возникает только один раз в len(a_list)
итерациях цикла, но это не очень важно, потому что мы знаем, что это произойдет в конечном итоге. Эта настройка избавляет нас от проверки того, является ли a_list
пустым несколько раз, но (возможно) это менее читаемо, чем использование явных условий.
Какой консенсус в отношении использования исключений для такого рода не исключительной программной логики?