【问题标题】:"TypeError: Type str doesn't support the buffer API" when using str.rstrip()使用 str.rstrip() 时出现“TypeError:类型 str 不支持缓冲区 API”
【发布时间】:2015-04-23 21:56:22
【问题描述】:

我正在尝试使用rstrip 方法从我的电子邮件内容中删除一些不必要的字符。我尝试使用print(r) 调试程序,但出现此错误:

File "/home/******/Desktop/loung/imap.py", line 23, in signin 
r = raw_email.rstrip('\r\n')
TypeError: Type str doesn 't support the buffer API

这是什么意思?
我的代码如下:

from tkinter import ttk
from tkinter import *
import tkinter, imaplib,email
def signin(w,x,s):
        tkgui = tkinter.Tk()
        tkgui.title('Inbox %s'%w)
        mail=imaplib.IMAP4_SSL(('%s'%s),993)
        mail.login(('%s'%w ), ('%s'%x))
        mail.list()
        mail.select("INBOX")
        result, data = mail.search(None, "ALL")
        ids = data[0]
        id_list = ids.split()
        tree = ttk.Treeview(tkgui)
        for i in range(-1,0):       
                result, data = mail.fetch(id_list[i], '(RFC822)')
                raw_email = data[0][1]
                d = email.message_from_bytes(raw_email)
                tree.insert('',0,value=(d['Date'],d['From'],d['Subject']))
        tree['columns']=['Date','From','Subject']
        r=raw_email.rstrip('\r\n')
        print(r)
        for col in tree['columns']:
            tree.heading(col,text=col)
        tree.pack(side=TOP,fill=BOTH,expand=1)
        tkgui.mainloop()

【问题讨论】:

  • 只执行一次的 for 循环有什么意义?

标签: python python-3.x tkinter


【解决方案1】:

在这种情况下,这意味着您需要使用字节而不是str,特别是在'\r\n' 中添加'b' 前缀以获得b'\r\n'raw_email 是字节,您只能从中剥离字节。另一方面,d 是一个 str 实例。这就是使用字符串的原因。

我相信最近更改了晦涩的错误消息,希望更易于理解。

【讨论】:

  • 该消息的意思是我所说的(在 3.x 中),您应该感谢我回答您的问题。如果你传递一个字节对象并得到一个不同的错误信息,那就是一个不同的问题和潜在的问题。
  • 它对我有用。我有包含二进制数据的原始行格式 gz 文件。现在它正在使用str.rstrip(b'\n');
猜你喜欢
  • 2015-07-26
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
相关资源
最近更新 更多