【问题标题】:python3 unreasonably return TabError: inconsistent use of tabs and spaces in indentation [duplicate]python3不合理地返回TabError:缩进中制表符和空格的不一致使用[重复]
【发布时间】:2016-05-23 20:04:09
【问题描述】:

我是 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

【问题讨论】:

  • 为什么不合理? Python 的解析器是一台机器,它不知道为什么。它发现一行使用制表符缩进,而其他行使用空格。删除标签,我会说。
  • 我解决了这个问题,方法是在默认编辑器中打开 python 文件,然后使用编辑选择所有内容 -> 全选,在该格式之后 -> 取消制表符区域(以 8 个空格作为制表符)。这已经解决了问题。

标签: python smtp indentation


【解决方案1】:

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

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

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

制表符还是空格?

切勿混合制表符和空格。

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

对于新项目,强烈建议仅使用空格而不是制表符。大多数编辑器都具有使此操作变得容易的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 2019-04-15
    • 2020-01-23
    • 2019-07-24
    • 2020-08-10
    • 1970-01-01
    • 2022-11-12
    相关资源
    最近更新 更多