Python传递带参函数至其他函数时触发TypeError问题求助
解决TypeError: 'int' object is not callable问题——函数参数传递错误分析
你遇到的这个错误核心原因很明确:你传递给parent函数的第一个参数不是函数对象,而是child()执行后返回的结果(整数或字符串),导致parent里的ux变成了一个非函数类型,自然没法被调用。我来一步步帮你梳理问题并修正。
问题拆解
函数传递错误:
你调用parent(child(), ui)时,child()会立即执行并返回一个值(比如输入3就返回3,输入其他就返回'error')。这意味着parent的ux参数拿到的不是child函数本身,而是一个整数/字符串,后续执行ux(x)时就会触发int object is not callable的错误。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
相关产品推荐
相关产品推荐

