You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python传递带参函数至其他函数时触发TypeError问题求助

解决TypeError: 'int' object is not callable问题——函数参数传递错误分析

你遇到的这个错误核心原因很明确:你传递给parent函数的第一个参数不是函数对象,而是child()执行后返回的结果(整数或字符串),导致parent里的ux变成了一个非函数类型,自然没法被调用。我来一步步帮你梳理问题并修正。

问题拆解

  1. 函数传递错误:
    你调用parent(child(), ui)时,child()会立即执行并返回一个值(比如输入3就返回3,输入其他就返回'error')。这意味着parent的ux参数拿到的不是child函数本身,而是一个整数/字符串,后续执行ux(x)时就会触发int object is not callable的错误。

  2. child函数参数定义错误:
    你用了*ui可变参数,它会把传入的参数打包成元组。比如你传数值3,user_choice会变成(3,),这样和单个整数比较永远不相等,最终只会返回'error'。

修正后的代码

第一步:修正child函数的参数定义

去掉可变参数*,直接定义单个参数接收用户选择:

def child(user_choice):
    if user_choice == 3:
        return 3
    elif user_choice == 4:
        return 4
    elif user_choice == 5:
        return 5
    else:
        return 'error'

第二步:修正parent函数的调用与逻辑

传递child函数本身(不加括号),同时优化参数命名避免混淆:

def parent(ux, user_choice):
    if user_choice == 0:
        return 0
    elif user_choice == 1:
        return 1
    elif user_choice == 2:
        return 2
    else:
        # 此时ux是真正的函数对象,可以正常调用并传递参数
        return ux(user_choice)

第三步:完整整合代码

import ID_Ui as Ui 

def child(user_choice):
    if user_choice == 3:
        return 3
    elif user_choice == 4:
        return 4
    elif user_choice == 5:
        return 5
    else:
        return 'error'

def parent(ux, user_choice):
    if user_choice == 0:
        return 0
    elif user_choice == 1:
        return 1
    elif user_choice == 2:
        return 2
    else:
        return ux(user_choice)

# 先获取用户的选择(假设Ui.admin_panel()会返回用户输入的整数)
user_selected = Ui.admin_panel()
# 传递child函数对象,而非执行后的结果
final_result = parent(child, user_selected)
print(final_result)

关键注意点

  • 传递函数作为参数时,只需要写函数名,不要加括号——加括号会立即执行函数并传递它的返回值,而非函数本身。
  • 可变参数*args适用于不确定参数数量的场景,如果你只需要单个参数,直接定义普通参数即可,避免类型不匹配的问题。

内容的提问来源于stack exchange,提问作者Mohammad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:03:50