尝试使用函数对参数求和时出现类型错误
Posted
技术标签:
【中文标题】尝试使用函数对参数求和时出现类型错误【英文标题】:getting a typeerror when trying to sum arguments using a function 【发布时间】:2022-01-07 15:27:50 【问题描述】:所以我正在使用预算计算器,我遇到了一个错误,我无法添加费用
这是错误:
Traceback (most recent call last):
File "/home/jason/Documents/budgetcalc/./budgetcalc.py", line 50, in <module>
totexpenses = exp.expenses(args.expenses)
TypeError: 'int' object is not callable
用于计算的代码:
class Expenses(Budgeter):
def __init__(self):
super().__init__()
def expenses(self, expense_list):
self.expenses = expense_list
total = sum(self.expenses)
return total
# instance
exp = Expenses()
定义的参数:
parser.add_argument('--expenses', help='n amounts of expenses', nargs='*', type=int)
这是该参数的代码:
if args.expenses:
totexpenses = exp.expenses(args.expenses)
# print(f'$income net income')
print(f'$totexpenses in expenses')
如果需要,这里是完整的代码:
#!/usr/bin/env python
import argparse
import sys
class Budgeter:
def __init__(self):
self.wage = 0
self.netincome = 0
self.expenses = 0
self.hours = 0
class Income(Budgeter):
def __init__(self):
super().__init__()
def income(self, wage, hours):
self.wage = wage
self.hours = hours
self.netincome = (float(self.wage) * int(self.hours)) * 4.34
return self.netincome
class Expenses(Budgeter):
def __init__(self):
super().__init__()
def expenses(self, expense_list):
self.expenses = expense_list
total = sum(self.expenses)
return total
parser = argparse.ArgumentParser()
parser.add_argument('--wage', help='enter a wage ($$/hr)')
parser.add_argument('--hours', help='hours per week')
parser.add_argument('--expenses', help='n amounts of expenses', nargs='*', type=int)
parser.add_argument('--interactive', help='get a prompt for easy use', action='store_true')
args = parser.parse_args()
pc_budgeter = Budgeter()
rawinc = Income()
exp = Expenses()
if args.wage and args.hours:
if int(args.hours) <= 24:
income = rawinc.income(args.wage, args.hours)
if args.expenses:
totexpenses = exp.expenses(args.expenses)
print(f'$income net income')
print(f'$totexpenses expenses')
else:
print('missing --expenses')
else:
print(f'there are only 24 hours in a day not args.hours')
else:
parser.print_help()
【问题讨论】:
请修剪您的代码,以便更容易找到您的问题。请按照以下指南创建minimal reproducible example。 【参考方案1】:Budgeter
类定义了一个名为expenses
的整数属性:
class Budgeter:
def __init__(self):
self.wage = 0
self.netincome = 0
self.expenses = 0
...然后Expenses
类,继承自Budgeter
,定义了一个名为expenses
的方法也:
class Expenses(Budgeter):
def __init__(self):
super().__init__()
def expenses(self, expense_list):
将其中一项重命名为不同的名称。
顺便说一句,子类中不需要__init__
,因为它唯一做的就是调用父类__init__
,无论如何这是默认行为。
【讨论】:
好吧,我不知道这个名字很重要以上是关于尝试使用函数对参数求和时出现类型错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥当我尝试在 MariaDB 数据库上创建此函数(使用点数据类型)时出现此错误?
TypeScript 通用函数 - 为数组应用函数时出现“参数不可分配错误”
PLS-00306:调用 'GET_LINE' 时参数的数量或类型错误。在 PL/SQL 中的函数中传递字符串参数时出现此错误