Python 脚本不会处理错误

Python 脚本不会处理错误,python,error-handling,raspberry-pi,imap,daemon,Python,Error Handling,Raspberry Pi,Imap,Daemon,我从网上找到的一些脚本中拼凑了一个脚本,用树莓圆周率做了一个快速的家庭自动化演示,以验证概念。后来我意识到它也可以用作无响应终端。很抱歉,没有给代码的原始所有者评分,因为我甚至不记得在哪里找到它,而且一开始也没有评分 无论如何。我对它做了自己的改变,效果很好。我将它设置为pi上的upstart守护程序,它运行find并按其应该的方式运行2-5天。然后它将挂起,在脚本中的某个地方,并且永远不会实际执行except:来执行错误处理。实际上,在我编写并作为守护进程运行的3个脚本中,有2个可以这样做 这

我从网上找到的一些脚本中拼凑了一个脚本,用树莓圆周率做了一个快速的家庭自动化演示,以验证概念。后来我意识到它也可以用作无响应终端。很抱歉,没有给代码的原始所有者评分,因为我甚至不记得在哪里找到它,而且一开始也没有评分

无论如何。我对它做了自己的改变,效果很好。我将它设置为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,问题消失了,当然,这是几年前的事了