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

向CSV写入光伏逆变器数据时遇AttributeError问题求助

问题排查与修正

错误直接原因

你代码里的datos = json.dump(inverter, f)是完全错误的操作:

  • json.dump()的作用是把字典转换成JSON格式写入文件,它本身返回None,所以datos就是None。
  • 当你把None传给writer.writerow()时,DictWriter会尝试读取这个对象的keys属性来匹配表头,但None没有这个属性,直接触发AttributeError。

其他关键问题

除了上面的直接错误,代码还有几个明显问题:

  1. 初始循环触发KeyError:一开始inverter是空字典,直接访问inverter['DCV_1']会报错,因为这个键不存在。
  2. 重复写入表头:每次打开文件追加都调用writer.writeheader(),会导致CSV文件里每一行数据前都重复出现表头,完全不符合CSV格式规范。
  3. 冗余的JSON操作:csv.DictWriter可以直接处理字典数据,不需要用JSON模块转格式,这会导致CSV文件同时混有JSON和CSV格式的内容,文件彻底混乱。

修正后的代码

import csv
import time

# 定义CSV表头
headers = ['ACW', 'ACA', 'ACV', 'PEAK_POW',
           'DCV_1', 'DCA_1', 'DCW', 'AC_EFFI', 'LINEA_DISTR']
file_csv = "huawei.csv"

# 首次运行时写入表头(仅文件不存在时执行)
try:
    with open(file_csv, 'r') as f:
        pass
except FileNotFoundError:
    with open(file_csv, 'w', newline='') as f:
        writer = csv.DictWriter(f, fieldnames=headers)
        writer.writeheader()

# 持续每5秒获取并写入数据
while True:
    # --------------------------
    # 替换成你从逆变器获取数据的代码
    # 确保inverter是符合格式的字典
    # 示例模拟数据:
    # inverter = {'ACW': 1431, 'ACA': 6.066, 'ACV': 237.2, 'PEAK_POW': 1.853, 'DCV_1': 192.2, 'DCA_1': 7.72, 'DCW': 1461, 'AC_EFFI': 97.91, 'LINEA_DISTR': 1033}
    # --------------------------

    # 验证数据有效性(避免空字典或无效值)
    if isinstance(inverter, dict) and inverter.get('DCV_1', 0) >= 0:
        with open(file_csv, 'a', newline='') as f:
            writer = csv.DictWriter(f, fieldnames=headers)
            # 直接写入字典数据
            writer.writerow(inverter)
    
    # 每5秒执行一次
    time.sleep(5)

修正说明

  • 移除了无用的json模块,直接用DictWriter处理字典数据。
  • 先判断文件是否存在,仅在首次运行时写入一次表头,避免重复。
  • 改用while True循环配合time.sleep(5),实现每5秒获取一次数据的需求。
  • 用inverter.get('DCV_1', 0)避免KeyError,同时增加了字典类型校验,确保写入的数据格式正确。
  • 原代码的while inverter['DCV_1'] < 0逻辑大概率有问题(光伏直流电压不可能为负),这里调整为当数据有效时写入,你可以根据实际需求修改判断条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:45:47