Стоимость обработчиков исключений в Python

В другом вопросе принятый ответ предложил заменить (очень дешевый), если оператор в Python кодирует с блоком попытки/кроме для улучшения производительности.

Стиль кодирования выходит в стороне, и предполагая, что исключение никогда не инициировано, сколько значения это имеет (мудрым производительностью), чтобы иметь обработчик исключений, по сравнению с не наличием того, по сравнению с наличием сравнить с нулем оператора "if"?

83
задан Community 23 May 2017 в 12:02
поделиться

2 ответа

Почему бы вам не измерить его с помощью модуля timeit ? Таким образом вы сможете увидеть, подходит ли он для вашего приложения.

Хорошо, я только что попробовал следующее:

import timeit

statements=["""\
try:
    b = 10/a
except ZeroDivisionError:
    pass""",
"""\
if a:
    b = 10/a""",
"b = 10/a"]

for a in (1,0):
    for s in statements:
        t = timeit.Timer(stmt=s, setup='a={}'.format(a))
        print("a = {}\n{}".format(a,s))
        print("%.2f usec/pass\n" % (1000000 * t.timeit(number=100000)/100000))

Результат:

a = 1
try:
    b = 10/a
except ZeroDivisionError:
    pass
0.25 usec/pass

a = 1
if a:
    b = 10/a
0.29 usec/pass

a = 1
b = 10/a
0.22 usec/pass

a = 0
try:
    b = 10/a
except ZeroDivisionError:
    pass
0.57 usec/pass

a = 0
if a:
    b = 10/a
0.04 usec/pass

a = 0
b = 10/a
ZeroDivisionError: int division or modulo by zero

Итак, как и ожидалось, отсутствие обработчика исключений немного быстрее (но взрывается вам прямо в лицо, когда возникает исключение), и try / except быстрее, чем явное if , пока условие не выполняется.

Но все это в пределах одного порядка величин и вряд ли будет иметь значение в любом случае. Только если условие действительно выполняется, тогда версия if значительно быстрее.

97
ответ дан 24 November 2019 в 08:51
поделиться

Фактический ответ на этот вопрос содержится в FAQ по проектированию и истории :

Блок try / except чрезвычайно эффективен, если нет исключений возбуждаются. На самом деле перехват исключения стоит дорого.

50
ответ дан 24 November 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: