Python 脚本不会处理错误
我从网上找到的一些脚本中拼凑了一个脚本,用树莓圆周率做了一个快速的家庭自动化演示,以验证概念。后来我意识到它也可以用作无响应终端。很抱歉,没有给代码的原始所有者评分,因为我甚至不记得在哪里找到它,而且一开始也没有评分 无论如何。我对它做了自己的改变,效果很好。我将它设置为pi上的upstart守护程序,它运行find并按其应该的方式运行2-5天。然后它将挂起,在脚本中的某个地方,并且永远不会实际执行except:来执行错误处理。实际上,在我编写并作为守护进程运行的3个脚本中,有2个可以这样做 这是我的密码Python 脚本不会处理错误,python,error-handling,raspberry-pi,imap,daemon,Python,Error Handling,Raspberry Pi,Imap,Daemon,我从网上找到的一些脚本中拼凑了一个脚本,用树莓圆周率做了一个快速的家庭自动化演示,以验证概念。后来我意识到它也可以用作无响应终端。很抱歉,没有给代码的原始所有者评分,因为我甚至不记得在哪里找到它,而且一开始也没有评分 无论如何。我对它做了自己的改变,效果很好。我将它设置为pi上的upstart守护程序,它运行find并按其应该的方式运行2-5天。然后它将挂起,在脚本中的某个地方,并且永远不会实际执行except:来执行错误处理。实际上,在我编写并作为守护进程运行的3个脚本中,有2个可以这样做 这
import imaplib
import email
import GPIO
import subprocess
import prowlpy
import time
import sys
import logging
logger = logging.getLogger('error.log')
# Configure logger to write to a file...
def my_handler(type, value, tb):
logger.exception("Uncaught exception: {0}".format(str(value)))
# Install exception handler
sys.excepthook = my_handler
pnotify = prowlpy.Prowl(###)
if __name__ == '__main__':
while True:
try:
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('###', '###')
mail.select('inbox')
mail.list()
typ, data = mail.search(None, 'ALL')
for num in data[0].split():
typ, data = mail.fetch(num, '(RFC822)')
typ, data = mail.search(None, 'ALL')
ids = data[0]
id_list = ids.split()
if id_list:
latest_email_id = int( id_list[-1] )
for i in range( latest_email_id, latest_email_id-1, -1):
typ, data = mail.fetch( i, '(RFC822)')
for response_part in data:
if isinstance(response_part, tuple):
msg = email.message_from_string(response_part[1])
varSubject = msg['subject']
varFrom = msg['from']
varFrom = varFrom.replace('<','')
varFrom = varFrom.replace('>','')
if varSubject == 'Lights - ON' :
varSubject = 1
GPIO.writePin(3, 0)
pnotify.add('RPi', 'Welcome Home', 'Notification', -2)
elif varSubject == 'Lights - OFF' :
varSubject = 1
GPIO.writePin(3, 1)
pnotify.add('RPi', 'Have a nice day!', 'Notification', -2)
elif 'CMD' in varSubject and '###' in varFrom: #REQUIRES VALIDATION
subprocess.call(varSubject.split("- ")[1], shell=True)
pnotify.add('RPi', 'CMD EXEC - '+varSubject.split("- ")[1], 'Notification', -2)
varSubject = 1
else :
varSubject = 0
else: #No Emails
varSubject = 0
#Remove used emails from mailbox
typ, data = mail.search(None, 'ALL')
for num in data[0].split():
mail.store(num, '+FLAGS', '\\Deleted')
mail.expunge()
mail.close()
mail.logout()
except:
print "Could not establish connection or some other error... waiting 20s"
time.sleep(20)
sys.exit()
要回答这个问题,需要阅读大量代码。这使得如果不在这个问题上花费过多的时间,就很难给出好的答案;大多数人宁愿继续讨论另一个问题。如果你将问题细化到尽可能小的样本,重现问题,你得到的答案的数量、质量和清晰度也会提高。编辑后的问题不必做与整个代码相同的事情,它只需要重现您需要帮助的一个方面:随机挂起。将调试打印写入外部日志文件,然后查看它被卡住的位置。顺便说一句,它甚至可能不一致……这就是问题所在。我确实有它试图写入日志文件,但从来没有。当它挂起时,看起来是随机的,并且需要几天的时间。我从来没有在日志中找到任何东西,也不知道什么可能是开始的原因。脚本执行了好几天,所以有一些变化,我开始倾向于更多与我的pi有关的东西。strace-p可能会告诉你。哦,伙计,过去的爆炸。我真希望从那以后我在这方面有所进步!我仍然认为这是Pi的问题,因为我升级了Pis,问题消失了,当然,这是几年前的事了