3

Alright so i'm having this TypeError: 'list' object is not callable

It's on the for loop below the (if type=='D')

Exact error is as follows:

     Traceback(most recent call last):
     file"test.py", line 55 in <module>
     main()
     File "test.py", line 49, in main
     for i in range(len(accountlist())):
     TypeError: 'list' object is not callable

My code is below, i've tried putting each parenthesis in brackets and renaming the list to something different, always getting around the same error.

What am i doing wrong here?

class BankAccount:

def __init__(self, getbankaccount, inputAmount=0):

    self.__balance = inputAmount

    self.__numDeposits = 0

    self.__numWithdrawals = 0

    self.__totalDeposits = 0

    self.__totalWithdrawals = 0

    self.__getbankaccount=getbankaccount

def getBalance(self):

    return self.__balance

def getNumDeposits(self):

    return self.__numDeposits

def getNumWithdrawals(self):

    return self.__numWithdrawals

def getTotalDeposits(self):

    return self.__totalDeposits

def getTotalWithdrawals(self):

    return self.__totalWithdrawals

def getbankaccount(self):

    return self.__getbankaccount

def Deposit(self,amount):

    self.__balance = self.__balance + amount

    self.__numDeposits = self.__numDeposits + 1

    self.__totalDeposits = self.__totalDeposits + amount

    return self.__balance

def Withdrawal(self,amount):

    if (self.__balance >= amount):

        self.__balance = self.__balance - amount

        self.__numWithdrawals = self.__numWithdrawals + 1

        self.__totalWithdrawals = self.__totalWithdrawals + amount

        return True

    else:

        return False


def main():
accountlist=[]

numbers=eval(input())

for i in range(numbers):

    account=input()

    amount=eval(input())

    initial=BankAccount(account, amount)

    accountlist.append(initial)

    type=input()

    while type!='#':

        if type=='D':

            account=input()

            amount=eval(input())

            for i in range(len(accountlist())):

                if(account==accountlist[i].getbankaccount()):

                    index=i

                    accountlist[index].Deposit(amount)

                    Print(amount, type, account)

        type=input()
main()

1 Answer 1

4

Your problem is that in the line for i in range(len(accountlist())): you have accountlist(). accountlist is a list, and the () means you're trying to call it like you would a function. Change the line to for i in range(len(accountlist)): and you should be all set.

On a sidenote, it's easy to recognize your problem from your error:

 TypeError: 'list' object is not callable

is telling you exactly what you need to know: that you're trying to "call" a list on line 49. Learning to read error messages is an important and useful skill.

Sign up to request clarification or add additional context in comments.

7 Comments

That fixed the TypeError, thanks a lot, but it's giving me a SyntaxError: Unexpected EOF while parsing on line 41. Which would be the first amount=eval(input()) below the first for loop, any idea what could of caused this?
@user2305960 I'm not sure why you'd need eval there. eval is used to evaluate python code that is contained in a string. If you're just looking for an amount from the user, I'd change that to amount=input().
Isn't eval(input()) used to convert the input into an int?
@user2305960 I suppose you could do that, it'd be much safer to just do int(input())
Why would it be safer than eval? My professor always used eval for int inputs.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.