แม้ว่าคำตอบของ @ gnu_lorien นั้นให้จุดเริ่มต้นที่ดี แต่โปรแกรมของฉันก็ล้มเหลวเนื่องจากข้อยกเว้นแรก
ฉันมาพร้อมกับโซลูชันที่ปรับปรุงใหม่ (และ / หรือ) ที่กำหนดเองซึ่งจะบันทึกข้อยกเว้นของฟังก์ชันที่ตกแต่งด้วยความ@handle_error
เงียบ
import logging
__author__ = 'ahmed'
logging.basicConfig(filename='error.log', level=logging.DEBUG)
def handle_exception(exc_type, exc_value, exc_traceback):
import sys
if issubclass(exc_type, KeyboardInterrupt):
sys.__excepthook__(exc_type, exc_value, exc_traceback)
return
logging.critical(exc_value.message, exc_info=(exc_type, exc_value, exc_traceback))
def handle_error(func):
import sys
def __inner(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception, e:
exc_type, exc_value, exc_tb = sys.exc_info()
handle_exception(exc_type, exc_value, exc_tb)
finally:
print(e.message)
return __inner
@handle_error
def main():
raise RuntimeError("RuntimeError")
if __name__ == "__main__":
for _ in xrange(1, 20):
main()