2301_77162233 2023-04-22 11:47 采纳率: 100%
浏览 18
已结题

python报错,一直改不出来


import os
import csv
import matplotlib.pyplot as plt

# 定义财务记录列表和文件名变量
finas = []
filename = "FinanceInfo.csv"

# 显示主界面
def ShowUI():
    os.system("cls")
    print("********** 财务记录管理系统 **********")
    print("1. 显示财务记录")
    print("2. 添加财务记录")
    print("3. 删除财务记录")
    print("4. 修改财务记录")
    print("5. 分析财务记录")
    print("6. 退出")


# 显示财务记录
def ShowFinaInfo():
    os.system("cls")
    print("********** 财务记录 **********")
    print("{0:<10}{1:<10}{2:<10}{3:<10}{4:<10}"
          "{5:<10}{6:<10}{7:<10}{8:<10}"
          .format("月份", "伙食费", "日杂费", "教育费",
                  "服装费", "医疗费", "交通费", "娱乐费", "交际费"))
    for fina in finas:
        print("{0:<10}{1:<10}{2:<10}{3:<10}{4:<10}"
              "{5:<10}{6:<10}{7:<10}{8:<10}"
              .format(fina["finaMon"], fina["mealCost"], fina["dailyCost"],
                      fina["eduCost"], fina["clothCost"], fina["medCost"],
                      fina["trafCost"], fina["recCost"], fina["comCost"]))


# 添加财务记录
def AddFinaInfo():
    os.system("cls")
    print("********** 添加财务记录 **********")
    fina = {}
    fina["finaMon"] = input("月份:")
    fina["mealCost"] = input("伙食费:")
    fina["dailyCost"] = input("日杂费:")
    fina["eduCost"] = input("教育费:")
    fina["clothCost"] = input("服装费:")
    fina["medCost"] = input("医疗费:")
    fina["trafCost"] = input("交通费:")
    fina["recCost"] = input("娱乐费:")
    fina["comCost"] = input("交际费:")
    finas.append(fina)
    SaveToFile()


# 删除财务记录
def DelFinaInfo():
    os.system("cls")
    print("********** 删除财务记录 **********")
    index = int(input("要删除的记录序号: "))
    if index >= 1 and index <= len(finas):
        finas.pop(index - 1)
        SaveToFile()
    else:
        print("不存在该记录!")


# 修改财务记录
def ModiFinaInfo():
    os.system("cls")
    print("********** 修改财务记录 **********")
    index = int(input("要修改的记录序号: "))
    if index >= 1 and index <= len(finas):
        fina = finas[index - 1]
        fina["mealCost"] = input("伙食费:")
        fina["dailyCost"] = input("日杂费:")
        fina["eduCost"] = input("教育费:")
        fina["clothCost"] = input("服装费:")
        fina["medCost"] = input("医疗费:")
        fina["trafCost"] = input("交通费:")
        fina["recCost"] = input("娱乐费:")
        fina["comCost"] = input("交际费:")
        SaveToFile()
    else:
        print("不存在该记录!")


# 保存财务记录到文件
def SaveToFile():
    with open(filename, mode="w", newline="", encoding="utf-8-sig") as f:
        writer = csv.DictWriter(f, fieldnames=["finaMon", "mealCost",
                                               "dailyCost", "eduCost",
                                               "clothCost", "medCost",
                                               "trafCost", "recCost",
                                               "comCost"])
        writer.writeheader()
        for fina in finas:
            writer.writerow(fina)


# 读取财务记录文件
def LoadFromFile():
    if not os.path.exists(filename):
        return
    with open(filename, mode="r", newline="", encoding="utf-8-sig") as f:
        reader = csv.DictReader(f)
        for row in reader:
            fina = {}
            fina["finaMon"] = row["finaMon"]
            fina["mealCost"] = row["mealCost"]
            fina["dailyCost"] = row["dailyCost"]
            fina["eduCost"] = row["eduCost"]
            fina["clothCost"] = row["clothCost"]
            fina["medCost"] = row["medCost"]
            fina["trafCost"] = row["trafCost"]
            fina["recCost"] = row["recCost"]
            fina["comCost"] = row["comCost"]
            finas.append(fina)


# 分析财务记录
def AnalyFinaInfo():
    os.system("cls")
    print("********** 分析财务记录 **********")
    # 在此处添加利用Matplotlib进行数据分析的代码


# 程序主流程
def main():
    LoadFromFile()
    while True:
        ShowUI()
        choice = input("请选择功能(输入数字):")
        if choice == "1":
            ShowFinaInfo()
            input("按任意键继续...")
        elif choice == "2":
            AddFinaInfo()
        elif choice == "3":
            DelFinaInfo()
        elif choice == "4":
            ModiFinaInfo()
        elif choice == "5":
            AnalyFinaInfo()
        elif choice == "6":
            break
        else:
            print("无效选项,请重新输入!")

if __name__ == '__main__':
    main()

我的运行代码是这样的,但是它给我报错,已经改了很多遍了,已经改废了,帮帮忙吧
报错的是这样:

Traceback (most recent call last):
  File "E:\xiazaiwenjian\FinanceInfo.csv\家庭财务分析系统.py", line 150, in <module>
    main()
  File "E:\xiazaiwenjian\FinanceInfo.csv\家庭财务分析系统.py", line 129, in main
    LoadFromFile()
  File "E:\xiazaiwenjian\FinanceInfo.csv\家庭财务分析系统.py", line 106, in LoadFromFile
    for row in reader:
  File "C:\Python38\lib\csv.py", line 110, in __next__
    self.fieldnames
  File "C:\Python38\lib\csv.py", line 97, in fieldnames
    self._fieldnames = next(self.reader)
  File "C:\Python38\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
  File "C:\Python38\lib\encodings\utf_8_sig.py", line 69, in _buffer_decode
    return codecs.utf_8_decode(input, errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd4 in position 1: invalid continuation byte
>>> 

  • 写回答

3条回答 默认 最新

  • 文盲老顾 WEB应用领新星创作者 2023-04-22 11:57
    关注

    你确认文件编码是utf-8-sig吗?

    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd4 in position 1: invalid continuation byte

    你这个报错提示,就是解码异常了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月30日
  • 已采纳回答 4月22日
  • 创建了问题 4月22日

悬赏问题

  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。