TypeError:无法在电子邮件中连接'str'和'list'对象

Enz*_*dal 13 python

我正在使用python发送电子邮件.现在,我想通过电子邮件从列表中发送条目,但我遇到一个错误,说"TypeError:无法连接'str'和'list'对象",我不知道调试它.以下是我的代码.我仍然是这种语言的新手(3周)所以我有一点背景.

import smtplib
x = [2, 3, 4] #list that I want to send
to = '' #Recipient
user_name = '' #Sender username
user_pwrd = '' #Sender Password
smtpserver = smtplib.SMTP("mail.sample.com",port)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo()
smtpserver.login(user_name,user_pwrd)

#Header Part of the Email       
header = 'To: '+to+'\n'+'From: '+user_name+'\n'+'Subject: \n'
print header

#Msg 
msg = header + x #THIS IS THE PART THAT I WANT TO INSERT THE LIST THAT I WANT TO SEND. the type error occurs in this line

#Send Email     
smtpserver.sendmail(user_name, to, msg)
print 'done!'

#Close Email Connection
smtpserver.close()
Run Code Online (Sandbox Code Playgroud)

Dav*_*ers 33

问题在于msg = header + x.您正在尝试将+运算符应用于字符串和列表.

我不确定你想要如何x显示,但如果你想要"[1,2,3]"之类的东西,你需要:

msg = header + str(x)
Run Code Online (Sandbox Code Playgroud)

或者你可以做到,

msg = '{header}{lst}'.format(header=header, lst=x)
Run Code Online (Sandbox Code Playgroud)


Irs*_*hat 5

问题是,在代码行中msg = header + x,名称header是一个字符串,并且x是一个列表,因此无法使用运算符将​​这两者连接起来+。解决办法是转换x为字符串。一种方法是从 中提取元素list,将它们转换str为和.join()它们在一起。所以你应该替换代码行:

msg = header + x
Run Code Online (Sandbox Code Playgroud)

经过:

msg = header + "".join([str(i) for i in x])
Run Code Online (Sandbox Code Playgroud)