gpt4 book ai didi

python - TypeError : function(self, item, **kwargs) 正好需要 2 个参数(给定 3 个)

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:43 25 4
gpt4 key购买 nike

我有一个函数,它将数据放入数据库,称为 new_item():

def new_item(self, item, **optional):

在发送一个网络表单后,一个函数应该检查用户输入,然后使用这个函数将用户输入放入数据库(我使用的是 Flask,函数名称是 add_item()) :

Market.new_item([request.form['title'], 
session.get('user_id'),
request.form['category']],
{'desc': request.form['desc'],
'place': request.form['place'],
'price': request.form['price'],
'ono': ono})

但是我得到这个错误:

File X, line 99, in add_item
'ono': ono})
TypeError: new_item() takes exactly 2 arguments (3 given)

为了调试,我在调用函数 add_item 之前打印了这条语句。控制台输出为:

([u'iPhone 5', '791465667539154', u'2'], 
{'price': u'99', 'place': u'Bossental', 'ono': True, 'desc': u'My brand new iPhone'})

我真的不知道怎么了。我以前从未使用过 **kwargs;这与问题有关吗?

最佳答案

您为函数提供了三个参数:

  1. 隐式self参数,Market
  2. 列表,将是item;和
  3. 导致问题的字典。

**optional 是一个特殊参数,它将所有尚未指定的关键字参数打包到字典中,可在函数内作为 optional 访问(按照惯例,这通常称为 kwargs)。

快速演示:

>>> def demo(x, y=None, **kwargs):
print 'x: {0}'.format(x)
print 'y: {0}'.format(y)
print 'kwargs: {0}'.format(kwargs)


>>> demo('foo', y='bar', z='baz')
x: foo # 'x' positional argument
y: bar # 'y' keyword argument
kwargs: {'z': 'baz'} # unspecified keyword arguments

你也可以使用 ** 将字典解压为关键字参数:

>>> demo('foo', **{'y': 'bar', 'z': 'baz'})
x: foo
y: bar
kwargs: {'z': 'baz'}

因此,如果您想将字典的内容传递到 **可选 参数中,您可以使用相同的语法将字典解压缩到关键字参数中:

Market.new_item([request.form['title'], 
session.get('user_id'),
request.form['category']],
**{'desc': request.form['desc'],
# ^ note asterisks
'place': request.form['place'],
'price': request.form['price'],
'ono': ono })

关于python - TypeError : function(self, item, **kwargs) 正好需要 2 个参数(给定 3 个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24240274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com