2014-10-23 20 views
7

Tôi đang làm việc để gửi email bằng python. Ngay bây giờ, tôi muốn gửi các mục từ danh sách qua email nhưng tôi gặp phải lỗi nói "TypeError: không thể nối các đối tượng 'str' và 'list'" và tôi không có ý định gỡ lỗi nó. Sau đây là mã mà tôi có. Tôi vẫn còn mới trong ngôn ngữ này (3 tuần) vì vậy tôi có một chút backgroud.LoạiError: không thể ghép các đối tượng 'str' và 'list' trong email

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() 
+0

Cùng với 'TypeError (...)' bạn cũng nên đã nhận được một traceback đó (cách hữu ích) cho bạn biết dòng mã lỗi của bạn là trong. –

+0

tôi nghi ngờ lỗi của bạn đã làm với dòng ' msg = header + x';) –

Trả lời

21

Vấn đề là với msg = header + x. Bạn đang cố gắng áp dụng toán tử + cho một chuỗi và một danh sách.

Tôi không chắc chắn chính xác làm thế nào bạn muốn x sẽ được hiển thị nhưng, nếu bạn muốn một cái gì đó như "[1, 2, 3]", bạn sẽ cần:

msg = header + str(x) 

Hoặc bạn có thể làm,

msg = '{header}{lst}'.format(header=header, lst=x) 
2

Vấn đề là trong dòng mã msg = header + x, tên header là một chuỗi và x là một danh sách để hai không thể được nối bằng + điều hành. Giải pháp là chuyển đổi x thành một chuỗi. Một cách để làm điều đó là để phần tử trích xuất từ list, chuyển đổi chúng thành str.join() chúng lại với nhau. Vì vậy, bạn nên thay thế các dòng mã:

msg = header + x 

bởi:

msg = header + "".join([str(i) for i in x]) 
Các vấn đề liên quan