【问题标题】:Cannot concatenate 'str' with 'int' objects inside class无法将“str”与类内的“int”对象连接起来
【发布时间】:2014-02-20 17:18:34
【问题描述】:

我收到“TypeError: cannot concatenate 'str' and 'int' objects”,但我之前已将 raw_input() 设置为 int() 函数。我在课堂上的功能(存款和交易)做错了什么?

class BankAccount(object):
    def __init__(self):
        f = open("ac.txt", "r")
        self.balance = f.read()

    def deposit(self, amt):
        f = open("ac.txt", "w")
        f.write(self.balance + amt)
        f.close()

    def withdraw(self, amt):
        pass

    def getBalance(self):
        return self.balance

    def transaction(self):
        choice = raw_input("\n1. Deposit\n2. Withdraw\n\nChoice: ")
        amount = int(raw_input("\nPlease enter your amount: "))

        if choice == "1":
            self.deposit(amount)
        elif choice == "2":
            self.withdraw(amount)   

我什至尝试过这样做:

amount = raw_input("\nPlease enter your amount: ")
amount = int(amount)

【问题讨论】:

    标签: python class python-2.7 io int


    【解决方案1】:

    在您的情况下,如果您想连接字符串,则不应使用int(raw_input(...,只需使用raw_input,否则您将在此处向字符串添加一个int:f.write(self.balance + amt)

    编辑:

    但如果您想添加数字 balance + amount,并将其写回文件,请将 self.balanceamt 都转换为数字(intfloat),如 @Hugh 所述。

    【讨论】:

      【解决方案2】:

      如果self.balance = f.read(),那么 balance 是一个 str,amount 是一个 int,str + int 会报错。

      改用f.write(self.balance + str(amt))

      【讨论】:

      • 他不想要int(self.balance) + int(amt)吗? (+1 都一样,因为这绝对是问题所在)
      • @JoranBeasley: ... 或self.balance = int(f.read()) 然后f.write(str(self.balance + amt));取决于他想要完成什么,但类型必须匹配。
      • 如果他的 amt 是 5 并且他的余额是 65655 写入文件而不是 70 ,这似乎是反直觉的......但我想这是一个机会他想要什么
      • @JoranBeasley 是的,我不希望它合并。我希望它通过存款和取款来加减。
      【解决方案3】:

      在“ac.txt”文件中,您将整数写入文本!那就是字符序列。因此之后

      f = open("ac.txt", "r")
      self.balance = f.read()
      

      self.balance 是一个字符串。所以你不能做self.balance + amt

      你应该写

      self.balance = int(f.read())
      

      确保您阅读了一些int,然后

      f.write(str(self.balance + amt))
      

      【讨论】:

        猜你喜欢
        • 2011-10-23
        • 2014-08-19
        • 1970-01-01
        • 1970-01-01
        • 2012-08-04
        • 1970-01-01
        • 2018-06-08
        • 2015-06-14
        • 1970-01-01
        相关资源
        最近更新 更多