デフォルトのopenメソッドを、例外もキャッチするラッパーでラップしたいと思います。動作するテスト例を次に示します。
truemethod = open
def fn(*args, **kwargs):
try:
return truemethod(*args, **kwargs)
except (IOError, OSError):
sys.exit('Can\'t open \'{0}\'. Error #{1[0]}: {1[1]}'.format(args[0], sys.exc_info()[1].args))
open = fn
私はそれの一般的な方法を作りたいです:
def wrap(method, exceptions = (OSError, IOError)):
truemethod = method
def fn(*args, **kwargs):
try:
return truemethod(*args, **kwargs)
except exceptions:
sys.exit('Can\'t open \'{0}\'. Error #{1[0]}: {1[1]}'.format(args[0], sys.exc_info()[1].args))
method = fn
しかし、それは機能しません:
>>> wrap(open)
>>> open
<built-in function open>
どうやら、method
これはパラメータのコピーであり、私が期待したような参照ではありません。pythonicの回避策はありますか?