使用Python的swmm_api调用LID_USAGE时出现TypeError错误的求助
修复swmm-api调用LID_USAGE时的TypeError问题
问题原因
swmm-api 0.4.37版本解析LID_USAGE相关行时,未正确处理带空格的路径参数(比如带空格的报告文件路径),直接用普通空格拆分导致参数数量超出LID_USAGE.__init__要求的8-12个位置参数范围,触发TypeError。
修复方案
方案1:修改SWMM模型文件(简单直接)
打开你的SWMM .inp模型文件,找到包含带空格路径的行(比如报告文件路径设置),用双引号将带空格的路径包裹起来。例如:
原行:
Report File C:\My Reports\output.rpt
修改后:Report File "C:\My Reports\output.rpt"
保存文件后重新运行代码,解析器会将带引号的内容识别为单个参数,避免拆分错误。
方案2:重载解析方法(无需修改inp文件)
在你的Python代码中,重载LID_USAGE类的行解析方法,使用shlex.split()替代默认的拆分逻辑,确保带空格的参数被正确识别:
import shlex from swmm_api import read_inp_file from swmm_api.input_file.sections.lid_usage import LID_USAGE # 备份原解析方法 original_from_line = LID_USAGE.from_inp_line # 定义修复后的解析方法 def fixed_lid_usage_parse(line): # 用shlex.split处理带空格和引号的参数 parsed_parts = shlex.split(line) return original_from_line(*parsed_parts) # 替换原方法 LID_USAGE.from_inp_line = fixed_lid_usage_parse # 正常加载模型文件 inp = read_inp_file("your_model_file.inp") # 现在可正常访问LID_USAGE数据 print(inp.LID_USAGE)
方案3:升级swmm-api版本
检查swmm-api的最新版本,后续版本可能已修复该解析问题,执行命令升级:
pip install --upgrade swmm-api
内容的提问来源于stack exchange,提问作者Yang Yang
相关产品推荐
相关产品推荐

