【问题标题】:TypeError when trying to call function inside function with **kwargs?尝试使用 **kwargs 在函数内部调用函数时出现 TypeError?
【发布时间】:2017-07-12 04:06:50
【问题描述】:

我对为什么会发生此错误感到困惑:

TypeError: func1() 正好接受 0 个参数(给定 1 个)

代码如下:

def func1(**kwargs):
    if kwargs['dog'] != 2:
        return False
    return True

def func2(**kwargs):
    if kwargs['cat'] != 3:
        return False
    return True

def func3(*listOfFuncs, **extraArgs):
    for func in listOfFuncs:
        if func(extraArgs) == False:
            print 'break'
            break
        print 'continue'
        continue

func3(func1, func2, dog=2, cat=1)

我正在尝试将函数名称作为参数传递给 func3。我还想在 fun3 中调用 func1 和 func2 时将“cat”和“dog”关键字参数都传递给它们,但在每个函数中只使用一个关键字参数?

任何帮助将不胜感激

【问题讨论】:

  • 您发布的错误不可能与代码匹配,任何地方都没有testy
  • 对不起。我重写了代码,以便在堆栈溢出时更容易阅读,但忘记更新错误消息。已更正。
  • 如果您对我的解决方案感到满意,请将答案标记为有用(支持),这也可能对其他用户有所帮助。这样我们可以管理堆栈溢出的好习惯。
  • 没问题。再次感谢

标签: python python-2.7


【解决方案1】:

您必须在函数调用时传递 **kwargs 参数。

我刚刚查看了您的代码。请尝试关注

def func1(**kwargs):
    if kwargs['dog'] != 2:
        return False
    return True

def func2(**kwargs):
    if kwargs['cat'] != 3:
        return False
    return True

def func3(*listOfFuncs, **extraArgs):
    print 
    for func in listOfFuncs:
        if func(**extraArgs) == False:
            print 'break'
            break
        print 'continue'
        continue

func3(func1, func2, dog=2, cat=1)

输出:

continue
break

【讨论】:

  • 谢谢你。真的很难解决!
  • 这是我的荣幸。我总是很乐意提供帮助。
猜你喜欢
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多