繁体   English   中英

为什么该程序从Aptana IDE运行而不是在python命令中运行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM