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

Python代码Windows运行正常,Linux下带引号处理的代码报错求助

解决Windows正常但Linux下Python长字符串拼接报错问题

问题根源

你这段代码的核心问题是手动替换引号的逻辑不符合CSV规范,冗余的转义处理容易在跨平台时触发格式错误。Windows下可能因字符串内容或系统默认编码的巧合暂时正常,但Linux下字符串处理的严格性会暴露问题。

解决方案

方案1:用csv模块自动处理(推荐)

csv模块会自动处理字段内的引号转义,完全兼容跨平台,避免手动处理的疏漏:

import csv
from io import StringIO
import json

# 构造日志字段列表
log_fields = [
    str(prompt),
    json.dumps(chat_response.json()),
    expected,
    id if got_function_call else f"{id}-will-retry",
    self.model,
    json.dumps(log_function),
    instructions
]

# 生成符合规范的CSV行
output_buffer = StringIO()
csv_writer = csv.writer(
    output_buffer,
    delimiter=';',
    quotechar='"',
    quoting=csv.QUOTE_ALL  # 给所有字段加双引号
)
csv_writer.writerow(log_fields)
new_log_entry = output_buffer.getvalue().strip() + "\n"

方案2:修正手动转义逻辑

如果坚持手动拼接,要遵循CSV规范:字段内的双引号需用两个双引号转义,而非替换为单引号:

new_log_entry = f'"{str(prompt).replace(\'"\', \'""\')}";"{json.dumps(chat_response.json()).replace(\'"\', \'""\')}";"{expected.replace(\'"\', \'""\')}";"{id.replace(\'"\', \'""\') if got_function_call else (id+\'-will-retry\').replace(\'"\', \'""\')}";"{self.model.replace(\'"\', \'""\')}";"{json.dumps(log_function).replace(\'"\', \'""\')}";"{instructions.replace(\'"\', \'""\')}"\n'

为什么之前的代码会报错

  • 把双引号替换为单引号会破坏原始字符串语义,若字段内本身包含单引号,会直接导致CSV字段边界混乱。
  • CSV标准中,正确的双引号转义方式是重复双引号,而非替换为其他字符,之前的逻辑不符合规范,跨平台时因字符串处理差异触发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:27:38