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

Python银行应用报错:TypeError: int()参数类型不匹配

解决TypeError: int()参数类型错误问题

你遇到的TypeError是因为创建Account实例时,把文件对象(data = open("data.txt", "r+")返回的_io.TextIOWrapper)传给了bakiye参数,而int()函数只能转换字符串、字节或数字类型,不能直接转换文件对象。

核心修复要点

  • 读取data.txt内的余额数值,而非直接传递文件对象
  • 移除代码中无意义的bakiye = data赋值语句
  • 修复Python缩进错误(原代码中while True、if分支下的代码缩进不符合语法规范)
  • 使用with语句管理文件操作,避免资源泄漏

修复后的完整代码

# 读取data.txt中的初始余额,转为整数
with open("data.txt", "r") as f:
    bakiye_degeri = int(f.read().strip())  # 去除空白字符后转换为整数

class Account :
    def __init__(self, isim, numara, bakiye):
        self.isim = isim
        self.numara = numara
        self.bakiye = bakiye  # 已传入整数,无需再次转换

    def hesapBilgileri(self):
        print("İsim : ", self.isim)
        print("Numara : ", self.numara)
        print("Bakiye : ", self.bakiye)

    def paraCek(self, miktar):
        if self.bakiye - miktar < 0:
            print("Bakiyeniz yeterli değil...")
        else:
            self.bakiye -= miktar
            print("Yeni bakiye : ", self.bakiye)
            # 可选:将更新后的余额写入文件持久化
            with open("data.txt", "w") as f:
                f.write(str(self.bakiye))

    def paraYatır(self, miktar):
        self.bakiye += miktar
        print("Yeni bakiye : ", self.bakiye)
        # 可选:将更新后的余额写入文件持久化
        with open("data.txt", "w") as f:
            f.write(str(self.bakiye))

# 创建Account实例,传入读取到的初始余额
account = Account("Atilla", 10000000000, bakiye_degeri)

# 登录逻辑修复缩进
while True:
    login = input("Şifrenizi giriniz : ")
    with open("passwordspy.txt", "r") as file:
        login2 = file.read().strip()  # 去除文件中的换行符等空白字符
    if login == login2:
        print("Giriş başarılı.")
        break
    else:
        print("Şifre yanlış.")

# 操作菜单修复缩进与错误提示
if login == login2:
    while True:
        islem = int(input("""Hangi işlemi yapmak istiyorsanız numarasını tuşlayın...
1.Hesap bilgilerini görüntüleme
2.Para yatırma
3.Para çekme

"""))
        if islem == 1:
            account.hesapBilgileri()
        elif islem == 2:
            miktar = int(input("Yatırılacak miktar : "))
            account.paraYatır(miktar)
        elif islem == 3:
            miktar = int(input("Çekilecek miktar : "))
            account.paraCek(miktar)
        else:
            print("Geçersiz işlem numarası...")  # 修正原错误提示,匹配无效操作场景

关键修改说明

  1. 余额读取逻辑:通过with语句安全读取data.txt内容,转换为整数后再传入Account构造函数,避免直接传递文件对象。
  2. 无效代码清理:删除所有bakiye = data的无意义赋值,避免变量混淆。
  3. 缩进修正:调整while循环、if分支下的代码缩进,符合Python语法要求。
  4. 持久化优化:在存款、取款方法中添加文件写入逻辑,确保余额变动后能保存到文件(不需要可删除此部分)。
  5. 提示语修正:将无效操作时的错误提示从“Şifre yanlış...”(密码错误)改为“Geçersiz işlem numarası...”(无效操作编号),匹配实际场景。

内容的提问来源于stack exchange,提问作者35FAN35

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:15:36