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

Python开发票务系统写入CSV报错 '_csv.writer' object is not iterable

票务系统问题修复

报错原因

'_csv.writer' object is not iterable 错误由代码末尾的 for row in writer: 触发:csv.writer 是CSV文件写入工具对象,本身不属于可迭代类型,不能用于for循环遍历。

其他逻辑问题

  • 所有用户的字段分别存储在name_l、age_l等列表中,但写入时错误使用了单次循环的临时变量,还直接传入完整列表作为字段值,输出内容完全不符合要求
  • 缺少表头写入逻辑
  • 未处理字段默认值:非马来西亚人没有OKU、IC号需补0和-,马来西亚人没有护照号需补-
  • IC号/护照号校验逻辑错误:输入错误后重输时,错误值也会被追加到列表,导致列表长度和购票人数不匹配

修复后完整代码

import csv

with open(input("\nInput file name with .csv extension: "), 'w+', newline='', encoding='utf-8') as f:
    people = int(input("\nHow many tickets: "))
    name_l = []
    age_l = []
    sex_l = []
    malaysian_l = []
    oku_l = []
    ic_number_l = []
    passport_number_l = []
    fee_l = []

    for p in range(people):
        name = str(input("\nName: "))
        name_l.append(name)

        malaysian = int(input("Malaysian (1 = Yes, 0 = No): "))
        malaysian_l.append(str(malaysian))

        age = int(input("Age: "))
        age_l.append(str(age))

        sex = str(input("Gender: "))
        sex_l.append(sex)

        if malaysian == 1:
            oku = int(input("OKU (1 = Yes, 0 = No): "))
            oku_l.append(str(oku))
            if age >= 13 and age <= 59:
                fee = 17.80
                if oku == 1:
                    fee += 5
            elif (age >= 4 and age <= 12) or age >= 60:
                fee = 7.10
                if oku == 1:
                    fee += 5
            else:
                fee = 0.00
                if oku == 1:
                    fee += 5
            fee_l.append(f"{fee:.2f}")
            print(fee)
            
            # 修正IC号校验逻辑,只有输入正确才加入列表
            while True:
                ic_number = str(input("Input IC Number: "))
                if len(ic_number) == 12:
                    ic_number_l.append(ic_number)
                    break
                print("IC Number must be 12 digits long. Try again!")
            # 马来西亚人护照号填-
            passport_number_l.append("-")

        else:
            # 非马来西亚人OKU填0,IC号填-
            oku_l.append("0")
            ic_number_l.append("-")
            if age >= 13:
                fee = 23.70
            elif age >= 4 and age <= 12:
                fee = 17.80
            else:
                fee = 0.00
            fee_l.append(f"{fee:.2f}")
            print(fee)
            
            # 修正护照号校验逻辑
            while True:
                passport_number = str(input("Input Passport Number: "))
                if len(passport_number) == 8:
                    passport_number_l.append(passport_number)
                    break
                print("Passport Number must be 8 digits long. Try again!")

    writer = csv.writer(f, delimiter = '\t')
    # 写入表头
    writer.writerow(["Name", "Age", "Sex", "Malaysian", "OKU", "IC-Number", "Passport-Number", "Fee"])
    # 遍历所有用户写入每行数据
    for i in range(people):
        writer.writerow([
            name_l[i], age_l[i], sex_l[i], malaysian_l[i],
            oku_l[i], ic_number_l[i], passport_number_l[i], fee_l[i]
        ])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:54:06