函数需要2个参数,应该只有一个

时间:2010-07-07 21:52:23

标签: python django function argument-passing

我有一个像这样的函数friend_exists

def friend_exists(request, pid):
    result = False
    try:
        user = Friend.objects.get(pid=pid)
    except Friend.DoesNotExist:
        pass  
    if user:
        result = True

    return result

我从我的其他功能中调用它:

exists = friend_exists(form.cleaned_data['pid'])

其中pid = u'12345678'。为什么我得到:

Exception Type: TypeError at /user/register/
Exception Value: friend_exists() takes exactly 2 arguments (1 given)

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

为什么你认为它只应该拿一个?你在函数定义中显然有两个参数:

def friend_exists(request, pid):

就在那里,它说它需要requestpid

答案 1 :(得分:2)

它需要两个参数,你只给它一个,form.cleaned_data ['pid']的值。如果该值实际上是两个参数的元组/列表,则需要使用星号扩展它:

exists = friend_exists(*form.cleaned_data['pid'])

在这种情况下,更简洁的方法可能是:

request, pid = form.cleaned_data['pid']
exists = friend_exists(request, pid)

答案 2 :(得分:1)

这看起来像django,所以正确调用你的函数的方法是friend_exists(request, form.cleaned_data['pid']。当调用视图函数时,会自动填充请求,因此看起来似乎应该在django应用程序中的每次调用中发生,但是当您手动调用该函数时,您必须手动传递{{1}对象。