Python代码报错:TypeError: 'list' object is not callable 求助
薪资计算Python代码报错:TypeError: 'list' object is not callable
运行代码时出现如下报错:
Traceback (most recent call last): File "D:/python/salaries.py", line 29, in <module> pay = totalManagerPay(salary) TypeError: 'list' object is not callable
我编写了一段薪资计算的Python代码,自认为已完成,但运行时触发上述错误。我搜索过相关解决方案,但都不适用,特来求助。我原以为报错出现在末尾if语句调用函数的部分,但移除括号后仍报错。
以下是我的代码:
from datetime import datetime # 补充原代码遗漏的导入,否则datetime.now()会报错 now = datetime.now() dt_string = now.strftime("%m/%d/%Y %H:%M:%S") def totalManagerPay(salary): return salary def totalHourlyPay(hours, rate): overtime = max(0, hours - 40) return (hoursWorked - overtime) * hourlyPay + overtime * hourlyPay * 1.5 def totalCommissionPay(sales): return 350 + 0.057 * sales def totalPieceWorkerPay(pieces): bonus = 500 if pieces > 500 else 0 return pieces * 4.50 + bonus totalManagerPay, totalHourlyPay, totalCommissionPay, totalPieceWorkerPay = [], [], [], [] while True: payCode = int(input("Enter pay code (0 to quit): ")) if payCode == 0: print("No employees at this time. Thank you.") break if payCode == 1: print("MANAGER SELECTED") salary = float(input("Enter gross weekly salary: ")) pay = totalManagerPay(salary) totalManagerPay.append(pay) elif payCode == 2: print("HOURLY WORKER SELECTED") hoursWorked = float(input("Enter number of hours worked: ")) hourlyPay = float(input("Enter hourly rate: ")) pay = totalHourlyPay(hoursWorked, hourlyPay) totalHourlyPay.append(pay) print("Hourly worker's pay is ${pay:.2f}\n") elif payCode == 3: print("COMMISSION WORKER SELECTED") weeklySales = float(input("Enter weekly sales: ")) pay = totalCommissionPay(weeklySales) totalCommissionPay.append(pay) print("Commission worker's pay is ${pay:.2f}\n") elif payCode == 4: print("PIECE BY PIECE WORKER SELECTED") piecesProduced = int(input("Enter number of pieces produced: ")) pay = totalPieceWorkerPay(piecesProduced) totalPieceWorkerPay.append(pay) print("Piece by Piece worker's pay is ${pay:.2f}\n") else: print("Error. Please enter a valid code.") if any([totalManagerPay, totalHourlyPay, totalCommissionPay, totalPieceWorkerPay]): print("\n******************** ABCD Inc. ************************") print("*********** Cumulative Salaries By Pay Code ***********") print("Employee Pay Code Number of Employees Cumulative Salary") print("-----------------------------------------------------------------------------") totalSalary, totalEmployees = 0, 0 for payCode, payList in enumerate([totalManagerPay, totalHourlyPay, totalCommissionPay, totalPieceWorkerPay], start=1): total = sum(payList) totalSalary += total totalEmployees += len(payList) print(f" {payCode:<25}{len(payList):<25}{total:.2f}") print("------------------------------------------------------------------------------") print(f"Totals {totalEmployees:<34} {totalSalary:.2f}") print("--------------------------------------------------------------------------------") print("Date: " + dt_string) print("************************************************************************")
问题原因及解决方法
核心错误:你定义的函数名
totalManagerPay、totalHourlyPay等,和后面用来存储薪资的列表变量名完全重名。执行totalManagerPay, totalHourlyPay, totalCommissionPay, totalPieceWorkerPay = [], [], [], []时,这些变量名被重新赋值为空列表,覆盖了之前的函数引用,导致调用totalManagerPay(salary)时实际是在调用列表,触发'list' object is not callable错误。修复步骤:
- 将存储薪资的列表变量改名,比如改为
manager_pays、hourly_pays、commission_pays、piece_worker_pays,避免和函数名冲突。 - 同步修改代码中所有引用这些列表的地方,比如
totalManagerPay.append(pay)改成manager_pays.append(pay),末尾枚举列表也对应替换。
- 将存储薪资的列表变量改名,比如改为
额外问题修复:
totalHourlyPay函数错误使用全局变量hoursWorked和hourlyPay,应改用函数参数hours和rate,修改后函数如下:
def totalHourlyPay(hours, rate): overtime = max(0, hours - 40) return (hours - overtime) * rate + overtime * rate * 1.5
内容的提问来源于stack exchange,提问作者uglyorgans
相关产品推荐
相关产品推荐

