[英]Python Error: Able to run the program from command line but not from IDE
[英]Why does this Program run from Aptana IDE and not in python command?
以下代码导致
htmlbody,emailaddress = ConnEmailParser()
TypeError: 'NoneType' object is not iterable
错误,但在IDE中工作正常。 正在发送电子邮件并生成PDF文件。 但是从命令行只能使用ConnEmailParser()
。
我该怎么办,程序可以顺利运行?
这里的代码片段:
import imaplib
import email
import quopri
from cStringIO import StringIO
import ho.pisa as pisa
from datetime import datetime
import logging
import smtplib
from email.generator import Generator
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import formatdate
from email import Encoders
def sendPdfSurvey():
def ConnEmailParser():
try:
saver = StringIO()
SERVER = "server"
USER = "user"
PASSWORD = "nono"
subject="a certain phrase"
imap4 = imaplib.IMAP4(SERVER)
imap4.login(USER, PASSWORD)
imap4.select()
imap4.search(None, 'ALL')
typ, data = imap4.search(None,'(UNSEEN SUBJECT "%s")' % subject) #looking for phrase
count = 0
for num in data[0].split():
count = count + 1 # this is stupid but it gets just oone messsage
if count ==1 :
typ, data = imap4.fetch(num,'(RFC822)')
email7 = email.message_from_string(data[0][1])
varSubject = email7['subject']
# The phase from above has an emailaddress in the subject field
emailaddressraw = varSubject[13:]
emailaddressmedium = emailaddressraw.replace("<","")
emailaddress= emailaddressmedium.replace(">","")
msg = email.message_from_string(data[0][1])
typ, data = imap4.store(num,'+FLAGS','\Seen')
a=str(msg)
i= a.decode('quopri').decode('utf-8')
saver.write(i)
savercontent = saver.getvalue()
# body of the email is html and all of the header elements get deleted
planhtml = savercontent.split('<html xmlns="http://www.w3.org/1999/xhtml">')[1].strip()
return planhtml, emailaddress.strip()
saver.close()
imap4.close()
imap4.logout()
except:
"could not get participant email!"
#here somewhere is the trouble maker
htmlbody,emailaddress = ConnEmailParser()
filenamePDF= "UmfrageEthics_%s.pdf" % datetime.utcnow().strftime('%m%d%H%M%S%f')
def printPdf():
try:
html = htmlbody
result = StringIO()
pdf = pisa.pisaDocument(StringIO(html.encode("UTF-8")), result, encoding='UTF-8')
filetoparse=open(filenamePDF,"wb")
filetoparse.write(result.getvalue())
filetoparse.close()
#pisa.startViewer(filenamePDF)
except:
print "could not write PDF"
def sendPdfParticipant():
try:
oNachricht = MIMEMultipart()
oNachricht['From'] = 'some@email.com'
oNachricht['To'] = emailaddress
oNachricht['Date'] = formatdate(localtime= True)
oNachricht['Subject'] = 'A subject'
oAnhang = MIMEBase('application','octet-stream')
oAnhang.set_payload(open(filenamePDF,'rb').read())
Encoders.encode_base64(oAnhang)
oAnhang.add_header('Content-Disposition', 'attachment;filename = some.pdf')
message_text_plain = u'Some message...'
oNachricht.attach(MIMEText(message_text_plain.encode('utf-8'), 'plain', 'UTF-8'))
io = StringIO()
g = Generator(io, False)
g.flatten(oNachricht)
oNachricht.attach(oAnhang)
user = 'user'
pwd = 'pwd'
smtpserver = smtplib.SMTP("smtp.raumopol.de",587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo
smtpserver.login(user, pwd)
smtpserver.sendmail('som@eemail.com',emailaddress,oNachricht.as_string())
smtpserver.quit()
except:
print"could no send data"
sendPdfSurvey()
在def ConnEmailParser()
,在调用data[0].split()
之前检查data
是否为None
。 如果为None
,请检查imap4
是否已正确启动以及登录是否有效。 如果是这种情况,请减少代码的确切位置,以指出实际出问题的地方。
正如@Jim Garrison所指出的,回溯将对我们(和您)有很大帮助。 这是这样的:
import traceback
try:
some_code...
except TypeError:
traceback.print_exc()
编辑 (根据您的评论)
对unicode字符串进行编码时,您要用“ \\ xfc”代码替换不属于ASCII的字符。 显然,在首先将其解释为unicode(您得到u'\\xfc'
)之后,saver.write()尝试对已编码的文本进行编码。 所以不要编码自己。 如果仍然出错,请参阅如何更改编码(例如'utf-8','cp1252')。 使用获取当前操作系统的编码
import locale
encoding=locale.getlocale()[1]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.