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

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错误。

  • 修复步骤:

    1. 将存储薪资的列表变量改名,比如改为manager_pays、hourly_pays、commission_pays、piece_worker_pays,避免和函数名冲突。
    2. 同步修改代码中所有引用这些列表的地方,比如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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:49:54