Почему вы не измеряете его, используя ? Таким образом, вы можете увидеть, подходит ли это для вашего приложения.
ОК, так что я просто попытался следующее:
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
значительно быстрее.
Когда вы измерили его, что вы узнали? –
Связанный вопрос: http://stackoverflow.com/questions/1835756/ – tzot
Используйте try/except, если шансы на управление будут за исключением части меньше, а если/else, если шансов больше. – shadow0359