TypeError:只能将列表(不是“str”)连接到列表 -

Posted

技术标签:

【中文标题】TypeError:只能将列表(不是“str”)连接到列表 -【英文标题】:TypeError: can only concatenate list (not "str") to list - 【发布时间】:2020-08-31 07:16:19 【问题描述】:

当用户提交联系我们表单时,我正在尝试收到一封电子邮件。数据库中的所有数据都已成功更新,但在将此详细信息发送到我的邮件时出现错误:-TypeError:只能将列表(而不是“str”)连接到列表。我没有添加任何“+”号,我在其中添加任何内容。

from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from flask_mail import Mail, Message
import json

with open('./templates/config.json','r') as f:
    params = json.load(f)["params"]

app = Flask(__name__)
app.config.update(
    MAIL_SERVER='smtp.gmail.com',
    MAIL_PORT=465,
    # MAIL_PORT=587,
    MAIL_USE_SSL=True,
    MAIL_USERNAME=params['gm_user'],
    MAIL_PASSWORD=params['gm_password']

)
mail = Mail(app)


if params['local_server']:
    app.config['SQLALCHEMY_DATABASE_URI'] = params['local_uri']
else:
    app.config['SQLALCHEMY_DATABASE_URI'] = params['prod_uri']

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

class Contacts(db.Model):
    sno = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), primary_key=False)
    phone = db.Column(db.String(13), unique=False, nullable=False,primary_key=False)
    email = db.Column(db.String(120), unique=False, nullable=False,primary_key=False)
    msg = db.Column(db.String(500), nullable=False,primary_key=False)



@app.route("/")
def home():
    return render_template('index.html',urlDict = params)

@app.route("/post")
def post():
    return render_template('post.html',urlDict = params)

@app.route("/contact",methods = ['GET','POST'])
def contact():
    if request.method == 'GET':
        return render_template('contact.html',urlDict = params)
    elif request.method =='POST':
        fName = request.form.get("name")
        fEmail = request.form.get("email")
        fMsg = request.form.get("msg")
        fPhone = request.form.get("phone")
        entry = Contacts(name=fName, email=fEmail, msg=fMsg, phone=fPhone)
        db.session.add(entry)
        db.session.commit()
        **mail.send_message(subject='', sender=fEmail, recipients=params['gm_user'], body = '')**

        return render_template('contact.html',urlDict = params)

@app.route("/about")
def about():
    return render_template('about.html',urlDict = params`enter code here`)

app.run(debug=True)

【问题讨论】:

【参考方案1】:

您必须在调用send_message 时将列表传递给recipients。现在你正在传递一个字符串(即params['gm_user']),flask_mail 试图在内部连接到一个列表。

请参阅文档中的第一个示例:https://pythonhosted.org/Flask-Mail/#sending-messages。

【讨论】:

【参考方案2】:

recipients=params['gm_user'] 中,由于收件人需要一个列表,因此出现错误

params['gm_user']

但在这里,它读作字符串。只需将其更改为以下内容:

recipients=[params['gm_user']]

这会将列表传递给收件人,它会起作用!

【讨论】:

以上是关于TypeError:只能将列表(不是“str”)连接到列表 -的主要内容,如果未能解决你的问题,请参考以下文章

Pandas TypeError:只能将str(不是“int”)连接到str

解决 TypeError:只能将元组(不是“str”)连接到元组

将当前url写入csv TypeError时:只能将列表(不是“元组”)连接到列表

TypeError:列表索引必须是整数或切片,而不是 str

只能将 str (不是“NoneType”)连接到 str 的问题

只能将 str (不是“字节”)连接到 str