import serial
import imaplib
from time import sleep
IMAP_SERVER='imap.gmail.com'
IMAP_PORT=993
ser= serial.Serial ('/dev/ttyACM0',9600)
M = imaplib.IMAP4_SSL(IMAP_SERVER, IMAP_PORT)
rc, resp = M.login('user@gmail.com', 'password')
print rc, resp
while True:
M.select()
for msg_num in M.search("INBOX", "UNDELETED")[1][0].split():
msg = M.fetch('1', '(BODY.PEEK[TEXT])')
String = msg[1][0][1][139:161]
print String
if String == "This is just a test...":
ser.write('0')
sleep(1)
我是python编程的新手,上面的python代码是我用于我想要的程序的代码。当我在终端中运行这个时,我得到了我已经验证了我的帐户的响应,然后它显示了字符139和&之间的消息。 161,示例电子邮件中的以下内容:
这只是一个考验......
这是在终端打印出来的。如果我删除收件箱中的邮件,则会出现:
String = msg[1][0][1][139:161]
TypeError: 'NoneType' object is unsubscriptable
我认为这是因为收件箱中没有任何消息。现在我想要做的是,如果没有消息一次又一次地运行,直到消息显示在我的收件箱和放大器中。根据消息进行相应的操作
答案 0 :(得分:0)
快速而肮脏的解决方法是抓住TypeError
。像这样:
try:
String = msg[1][0][1][139:161]
except TypeError:
continue
尽管如此,这可能会有所改善。首先,您可以使用
if 'This is just a test...' in String:
# ...
而不是将邮件正文切换为位并依赖于确切的位置。您可能还需要确认msg[1][0]
是正文元组,或者在找到它之前迭代msg
中的项目。
您可能也有兴趣阅读PEP 8。如果你坚持下去,其他人更有可能快速阅读你的代码。