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

Python如何从SCPI电源返回的错误字符串中提取引号内内容

SCPI错误响应双引号内描述文本提取实现方案

固定位置索引截取失效的核心原因是SCPI标准定义的错误码长度不固定(最短1位,自定义设备错误码可达4-5位),依赖固定字符偏移的方案无法兼容所有错误码场景,以下三种方案均可无视错误码长度准确提取目标文本:

方案1:双引号定位切片(无依赖、性能最优)

直接定位字符串中首尾双引号的位置做切片,完全不关心前半段错误码的长度和格式,是工业级SCPI工具里最常用的实现方式:

def get_error_desc(raw_response: str) -> str:
    # 定位第一个双引号位置,后移1位为文本起点
    start = raw_response.find('"') + 1
    # 定位最后一个双引号位置为文本终点
    end = raw_response.rfind('"')
    return raw_response[start:end]

# 验证示例
print(get_error_desc('+0,"No Error"'))          # 输出: No Error
print(get_error_desc('-400,"Query Error"'))     # 输出: Query Error
print(get_error_desc('-2005,"Output overvoltage protection triggered"')) # 长错误码场景正常输出

该方案对错误描述中包含逗号、数字、特殊符号的场景完全兼容,无拆分错误风险。

方案2:单分隔符拆分后去引号(逻辑直观易读)

SCPI错误格式中错误码和错误描述仅通过第一个逗号做分隔,因此可以仅按第一个逗号拆分字符串,对拆分后的描述段去除首尾双引号即可:

def get_error_desc(raw_response: str) -> str:
    # 限制仅拆分1次,避免错误描述中自带逗号导致拆分异常
    _, desc_with_quote = raw_response.split(',', maxsplit=1)
    return desc_with_quote.strip('"')

使用该方案必须指定最大拆分次数为1,否则当错误描述文本本身包含逗号时,会出现内容截断问题。

方案3:正则匹配(容错性最强)

如果设备返回的响应前后可能夹带空格、换行符、其他冗余字符,可使用正则直接匹配双引号包裹的目标内容,抗干扰能力最强:

import re

def get_error_desc(raw_response: str) -> str:
    # 匹配双引号包裹的所有非引号内容
    match_result = re.search(r'"([^"]*)"', raw_response)
    return match_result.group(1) if match_result else ""

适配提示:如果设备返回的错误描述中存在转义双引号(例如-150,"Invalid char \" in command"),可将正则规则替换为r'"((?:[^"\\]|\\.)*)"',即可兼容转义字符场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:06:24