2016-04-25 90 views
2

我的项目的代码是完全一样以下模块:我可以改变“提高”或“例外”的行为吗?

try: 
    execute_some_code() 
except Exception: 
    print(datetime.datetime.now()) 
    raise 

仅仅是因为,如果我得到一个错误信息,我想知道什么时候发生。我觉得反复重复这些代码非常愚蠢,我想把它分开。

我不想装饰execute_some_code的东西,这样做的错误捕获(因为有时它只是一个代码块,而不是一个函数调用,有时我不需要完全相同的功能来装饰,就像那样)。我也不希望将stdout转移到记录所有内容的其他流,因为这会影响其他所有发送到stdout的内容。

理想情况下,我希望覆盖raise语句(在每次执行时也打印datetime.datetime.now())或Exception类的行为,以预先将所有消息与时间挂起。我可以很容易地从Exception中进行分类,但是之后我必须确保我的函数能够引发这个子类的一个实例,并且我会有与当前一样多的代码重复。

这些选项可能有哪些?

+0

正在使用调试器一个选项吗? – xuhdev

+0

我正在写'sys.excepthook',但@IljaEverilä打倒我找到了这个谜。 – Boldewyn

回答

0

您可能能够修改蟒蛇(我不得不读代码,以确定如何复杂,会是),但:

你做希望与不同的行为来取代raise - 尝试捕捉是解决问题的一种非常pythonic的方法,所以有很多代码可以很好地工作,例如调用一个方法并让该方法引发异常,在正常情况下捕获该异常。所以我们可以将这种方法排除在外 - 你只是想知道你关心的例外情况,而不是那些在运行中正常的情况。

这同样适用于触发每当创建一个实例Exception一些动作 - 但是:

您可能能够覆盖全局命名空间;至少对于你申报自己的Exception类后得到初始化的东西。然后,您可以添加包含时间戳的message属性。但是,不要这样做 - 可能有人真的依赖这个消息来自动地对异常做出反应(糟糕的风格,但仍然不是很少,可悲)。

相关问题