【问题标题】:TypeError: __init__() got an unexpected keyword argumentTypeError: __init__() 得到了一个意外的关键字参数
【发布时间】:2012-12-11 07:46:37
【问题描述】:

以下是我在表单中用于将新案例输入 GAE 数据存储区的代码。当我尝试输入表单时,我收到下面的类型错误,说我使用了意外的关键字参数。我是 python 新手,GAE 有人知道我做错了什么吗?

class Case(db.Model):
    user = db.StringProperty(required = True)
    title = db.StringProperty(required = True)
    facts = db.TextProperty()
    holding = db.TextProperty()
    rule_of_law = db.TextProperty()
    general_notes = db.TextProperty()
    key_concepts = db.TextProperty()        

class NewCase(Handler):
    def get(self,title="",
            facts="",
            holding="",
            rule_of_law="",
            general_notes="",
            key_concepts="",
            error=""):

        if self.user:
            self.render('newcase.html', title=title,
                        facts=facts,
                        holding=holding,
                        rule_of_law=rule_of_law,
                        general_notes=general_notes,
                        key_concepts=key_concepts,
                        error=error)
        else:
            self.redirect('/login')

def post(self):
    if not self.user:
        self.redirect('/')

    user = self.read_secure_cookie('user_id')    
    self.title = self.request.get('title')
    self.facts = self.request.get('facts')
    self.holding = self.request.get('holding')
    self.rule_of_law = self.request.get('rule_of_law')
    self.general_notes = self.request.get('general_notes')
    self.key_concepts = self.request.get('key_concepts')

    if self.title:
        c = Case(user = user,
                 title = self.title,
                 facts = self.facts,
                 holding = self.holding,
                 rule_of_law = self.rule_of_law,
                 general_notes = self.general_notes,
                 key_concepts = self.key_concepts)

        c.put()

        self.redirect('/%s' % c.key().id())

    else:
        error = "You must enter a title."
        self.render('newcase.html',title = self.title,

我得到的错误:

File "C:\Users\Chris\Documents\Web Apps\legalstudybuddy\main.py", line 233, in post
    key_concepts = self.key_concepts)
TypeError: __init__() got an unexpected keyword argument 'rule_of_law'

【问题讨论】:

  • 你必须展示你的处理程序
  • 不知何故我似乎已经解决了这个问题。不太确定我做了什么,但现在可以了。

标签: python google-app-engine typeerror keyword-argument


【解决方案1】:

我假设您使用的是 Django 模板。 来自:https://developers.google.com/appengine/docs/python/gettingstarted/templates

template.render(path, template_values) 获取模板文件的文件路径和值字典,并返回呈现的文本。

请注意,render 仅接受两个参数:您提供的模板路径,以及包含模板期望的所有其他值的单个字典。

您将所有这些值作为参数提供给它,而不是打包到字典中。

变化:

self.render('newcase.html', title=title, facts=facts, holding=holding, ... )

到:

self.render('newcase.html', {title=title, facts=facts, holding=holding, ...})

对于任何其他渲染调用也是如此。

【讨论】:

  • 问题似乎与渲染调用无关,因为我使用具有多个变量的其他渲染调用并且它工作得很好。我认为类型错误是指创建 GAE 实体案例时出现的意外关键字参数。编辑第 233 行是 c = Case(...) 中的行
【解决方案2】:

在遇到同样的问题后,我发现我的问题出在 webapp2.WSGIApplication Route 定义中。

我已将我的路线定义如下,例如

webapp2.Route('/api/something/anEndpoint', handlers.SomethingEndpointHandler)

但是,甚至没有到达该路由,因为正在触发另一个捕获正则表达式关键字(在路由列表中之前定义)的路由:

webapp2.Route('/api/something/<something_id>', handlers.SomethingElseHandler)

这导致 OP 中的 TypeError 出现意外的关键字参数“something_id”。

一个非常难以调试的错误,但希望这对某人有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-16
    • 2020-10-22
    • 2021-11-17
    • 2016-11-01
    • 2021-10-21
    • 2021-10-15
    • 2021-12-30
    • 2020-08-21
    相关资源
    最近更新 更多