python3不合理地返回TabError:缩进中使用制表符和空格不一致

时间:2016-02-12 15:41:23

标签: python smtp indentation

我是python的新手。我发现我的python代码返回不合理地返回标签错误:

msgs ['to'] =“xxx@gmail.com”
                                        ^ TabError:缩进中标签和空格的使用不一致

以下是我的代码的一部分:

def send_email(self):
    try:
        msgs = MIMEMultipart()
        msgs['to'] = "xxx"
        msgs['from'] = "xxx"
        msgs['subject'] = "abc"
        msgs.attach(MIMEText(file("~/att1.py").read())
        msgs.attach(MIMEText(file("~/att2.docx").read())

        server = smtplib.SMTP()
        server.connect('smtp.gmail.com:587')
        server.login('xxx','xxx')
        server.sendmail(msgs['from'], msgs['to'],msgs.as_string())
        server.quit()
        print "Successfully sent email"
        return True
    except SMTPException:
        print "Error: unable to send email"
        print str(SMTPException)
        return False

1 个答案:

答案 0 :(得分:5)

您的代码确实使用制表符空格不一致。将原始帖子复制到Sublime Text 3,然后选择所有行时,我可以看到标签(行)和空格(点):

enter image description here

请注意,我将标签设置为扩展为 8个空格,这也是Python的功能。请注意msgs[..]行现在不再排队了。在Python 3中混合制表符和空格以进行缩进也是一种语法错误。

配置文本编辑器以在使用TAB键时插入空格。这是Python代码的推荐配置,因为选项卡宽度取决于编辑器配置,而空格总是相同的宽度。这是Python styleguide (PEP 8)建议的内容:

  

标签或空格?

     

切勿混合标签和空格。

     

缩进Python最流行的方法是仅使用空格。第二种最流行的方式是仅使用标签。使用制表符和空格混合缩进的代码应转换为仅使用空格。当使用-t选项调用Python命令行解释器时,它会发出有关非法混合制表符和空格的代码的警告。使用-tt时,这些警告会出错。强烈推荐这些选项!

     

对于新项目,强烈建议仅使用空格。大多数编辑都具有使这很容易做到的功能。