TypeError:__ init __()占用1个位置参数,但给出3个

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TypeError:__ init __()占用1个位置参数,但给出3个相关的知识,希望对你有一定的参考价值。

我知道这个标题对于一些古老的问题看起来很熟悉,但我看过它们中的每一个,没有一个能解决。这是我的代码:

TypeError: __init__() takes 1 positional argument but 3 were given

Traceback (most recent call last)
File "C:Usershp uservirtual_flasklibsite-packagesflaskapp.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "C:Usershp uservirtual_flasklibsite-packagesflaskapp.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "C:Usershp uservirtual_flasklibsite-packagesflaskapp.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:Usershp uservirtual_flasklibsite-packagesflask\_compat.py", line 33, in reraise
raise value
File "C:Usershp uservirtual_flasklibsite-packagesflaskapp.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "C:Usershp uservirtual_flasklibsite-packagesflaskapp.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:Usershp uservirtual_flasklibsite-packagesflaskapp.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:Usershp uservirtual_flasklibsite-packagesflask\_compat.py", line 33, in reraise
raise value
File "C:Usershp uservirtual_flasklibsite-packagesflaskapp.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "C:Usershp uservirtual_flasklibsite-packagesflaskapp.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:Usershp userPycharmProjectsflask123views.py", line 19, in create
create_post = Post(my_form.title.data, my_form.text.data)
TypeError: __init__() takes 1 positional argument but 3 were given
The debugger caught an exception in your WSGI application. You can now look at the traceback which led to the error.
To switch between the interactive traceback and the plaintext one, you can click on the "Traceback" headline. From the text traceback you can also create a paste of it. For code execution mouse-over the frame you want to debug and click on the console icon on the right side.

You can execute arbitrary Python code in the stack frames and there are some extra helpers available for introspection:

dump() shows all variables in the frame
dump(obj) dumps all that's known about the object

我的课程如下:

models.朋友

from app import db
from datetime import datetime


class Post(db.Model):
    post_id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    text = db.Column(db.Text())
    created_time = db.Column(db.DateTime())

    def __init__(self, title, text, created_time=None):
        self.title = title
        self.text = text
        if created_time is None:
            self.created_time = datetime.utcnow()
        else:
            self.created_time = created_time

views.朋友

from app import app, db
from flask import render_template, request, url_for
from forms import CreateForm
from models import Post


@app.route('/')
def homepage():
    return render_template('base.html')


@app.route('/create', methods=['GET', 'POST'])
def create():
    form = CreateForm(csrf_enabled=False)
    if request.method == 'GET':
        return render_template('create.html', form=form)
    if request.method == 'POST':
        if form.validate_on_submit():
            create_post = Post(form.title.data, form.text.data)
            db.session.add(create_post)
            db.session.commit()
    return redirect(url_for('homepage'))

我尝试了所有可能的解决方案,并检查了我的代码拼写错误。但我没有找到。

答案

错误

TypeError:__ init __()占用1个位置参数,但给出3个

发生在代码处

create_post = Post(my_form.title.data, my_form.text.data)

不要将位置参数传递给Post对象的创建,而是传递keyword arguments

create_post = Post(title=my_form.title.data, text=my_form.text.data)

以上是关于TypeError:__ init __()占用1个位置参数,但给出3个的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: __init__() 接受 1 个位置参数,但给出了 2 个

图表类:TypeError:__init__() 接受 1 个位置参数,但给出了 3 个

Spyder 未以 TypeError 开头:__init__() 缺少 1 个必需的位置参数

解决TypeError: __init__() missing 1 required positio

初始化 kivy 屏幕时遇到困难,TypeError: __init__() 需要 1 个位置参数,但给出了 2 个

TypeError: __init__() 得到了一个意外的关键字参数“评分”