例外を投げうる関数の呼び出しに特にオーバーヘッドはない

そうそう、以前Twitterで「Pythonの例外を投げる関数と投げない関数では呼び出しコストに差があるのか」的な話があったときに書いたコード、このまま埋もれても無駄だし貼付けておこう。

import timeit

print timeit.Timer("foo(1)", setup="""
def foo(x):
    if x:
        return None
    else:
        return x
""").repeat()

print timeit.Timer("bar(1)", setup="""
def bar(x):
    if x:
        return None
    else:
        raise NotImplemented
""").repeat()
[0.24111700057983398, 0.22863888740539551, 0.22955012321472168]
[0.23151803016662598, 0.23359298706054688, 0.2297508716583252]