我有一个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随机。
答案 0 :(得分:1)
您实际上并未致电function
function
什么都不做。你需要做什么
function()