我可以獲取在回溯中調用的最後一個函數的參數嗎?怎麼樣?從回溯中獲取最後一個函數的調用參數?
我想製作一個標準錯誤捕捉器來製作可讀的代碼,但是卻向用戶提供了詳細的信息。
在以下示例中,我希望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用於裝飾)
你的除外應該是「除(IOError,OSError):」。就目前而言,您只捕獲IOError,然後將異常實例分配給OSError。 – jamessan 2009-10-30 16:34:46
糟糕。謝謝,詹姆斯。 – 2009-10-30 17:56:21