トレースバックで最後に呼び出された関数のパラメーターを取得できますか? どのように?
標準エラーのキャッチャーを作成して、読み取り可能なコードを作成しながら、詳細な情報をユーザーに提供したいと考えています。
次の例では、GET_PARAMS が os.chown に提供されたパラメーターのタプルを返すようにします。Alex Martelli がアドバイスしたモジュールを調べたところinspect
、それが見つかりませんでした。
def catch_errors(fn):
def decorator(*args, **kwargs):
try:
return fn(*args, **kwargs)
except (IOError, OSError):
msg = sys.exc_info()[2].tb_frame.f_locals['error_message']
quit(msg.format(SEQUENCE_OF_PARAMETERS_OF_THE_LAST_FUNCTION_CALLED)\
+ '\nError #{0[0]}: {0[1]}'.format(sys.exc_info()[1].args), 1)
return decorator
@catch_errors
def do_your_job():
error_message = 'Can\'t change folder ownership \'{0}\' (uid:{1}, gid:{2})'
os.chown('/root', 1000, 1000) # note that params aren't named vars.
if __name == '__main__' and os.getenv('USERNAME') != 'root':
do_your_job()
(デコレーターのJim Robertに感謝)