在Exception连续提升一个多小时后发送电子邮件

时间:2015-08-20 16:00:20

标签: python exception

我有一个Python程序,每隔5分钟从一个cron作业处理一个带有Selenium的网页。 cron向我发送了一封电子邮件,报告了每个异常(cron只捕获了所有stderr)。有时网站会出现一些持续的内部错误,最终我会收到数百封系统电子邮件进行检查。然后我开始忽略异常,但我发现如果问题持续一小时,程序会给我发电子邮件会更加明智。

我写了以下代码:

#!/usr/bin/env python3

import sys, os, time

name = os.path.basename(sys.argv[0])

def send_email(server, message):
    # just print for testing
    print('Sending email...')

def handle_exception(exception, function):
    # save a state file in /dev/shm with the name of the exception
    warn_state = '/dev/shm/{}.{}'.format(name, exception.__name__)
    try:
        function
    except(exception) as exception:
        if os.path.exists(warn_state):
            if time.time() - os.path.getmtime(warn_state) > 3600:
                send_email('localhost', exception.args[1])
        else:
            open(warn_state, 'w').close()
    else:
        if os.path.exists(warn_state):
            os.remove(warn_state)

def my_function():
    # try raising a NameError
    print(undefined_variable)

# run my_function() catching exceptions
handle_exception(NameError, my_function)

当我运行上面的代码时,我检查了 else:部分正在执行,表明function没有完全失败。我是编程的新手,所以我真的不知道这是否是正确的方法,但我创建了这个函数,因为我必须在这个脚本上处理至少五种不同类型的异常,由于服务器或网络问题,由Selenium随机。

1 个答案:

答案 0 :(得分:1)

您实际上并未致电function

function

什么都不做。你需要做什么

function()