Python解析CSV生成新日志文件时遇语法错误求助
Python代码f-string语法错误排查与解决
问题场景
需要处理一个逗号分隔的CSV文件,提取其中特定行并生成指定格式的语句写入新文件。编写的Python代码预期生成类似force <PATH> = spi_bits[(NUM_OF_SPI_HALF0*chip) + 16];`的语句,但运行时第13行触发语法错误。
相关代码
import csv import os cdie_db_root_path = os.environ['CDIE_DB_ROOT'] verif_home_path = os.environ['VERIF_HOME'] with open(verif_home_path + "/gic/envir/testbench/al_gic_spi_forces.inc","w") as spi_forces: with open(cdie_db_root_path + "/Interrupts/verif/package_verif_signal_list.csv", "r") as fh: csv_reader = csv.reader(fh, delimiter=',') next(csv_reader) #first line is a comment for row in csv_reader: if (int(row[1]) > 14): spi_forces.write(f'force {row[3]} = spi_bits[(`NUM_OF_SPI_HALF0*chip) + {row[1]}];\n')
预期输出
force <PATH> = spi_bits[(`NUM_OF_SPI_HALF0*chip) + 16]; force <PATH> = spi_bits[(`NUM_OF_SPI_HALF0*chip) + 17]; force <PATH> = spi_bits[(`NUM_OF_SPI_HALF0*chip) + 18]; ...
报错信息
File "bin/interrupts_parsing.py", line 13 spi_forces.write(f'force {row[3]} = spi_bits[(`NUM_OF_SPI_HALF0*chip) + {row[1]}];\n')
错误原因
核心问题是使用的Python版本低于3.6:f-string(格式化字符串字面值)是Python 3.6才正式引入的语法特性,低版本Python无法识别该语法,直接抛出语法错误。
解决方案
方案1:升级Python版本
如果运行环境允许,直接将Python升级到3.6或更高版本,原代码的f-string语法即可正常运行,无需修改代码。
方案2:替换为兼容低版本的格式化方式
若无法升级Python,将第13行的f-string替换为str.format()方法(兼容性更好):
spi_forces.write('force {} = spi_bits[(`NUM_OF_SPI_HALF0*chip) + {}];\n'.format(row[3], row[1]))
也可以使用字符串拼接的方式(可读性稍弱):
spi_forces.write('force ' + row[3] + ' = spi_bits[(`NUM_OF_SPI_HALF0*chip) + ' + row[1] + '];\n')
修改后重新运行代码,即可生成符合预期的输出内容。
内容的提问来源于stack exchange,提问作者Yoav Reznik
相关产品推荐
相关产品推荐

