KeyError を warning にする

Python の場合、組み込みクラスのオブジェクトに setattr できないんだよなぁ。ちなみに基底クラスのメソッドを呼び出すなら super を使うのが常套手段な気がする。
まぁ、どうせやるならこれくらい。該当箇所のファイル名、行番号が出まする。

import sys
import traceback

class MyDict(dict):
    def __getitem__(self, key):
        try:
            return super(MyDict, self).__getitem__(key)
        except KeyError, e:
            tb = sys.exc_info()[2]
            info = traceback.extract_stack(tb.tb_frame)[-2]
            print >>sys.stderr, """KeyError %r: at %s:%d""" % (e.message, info[0], info[1])