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

Python提取Inkscape Gcode坐标出现AttributeError错误如何解决

问题解决方案

错误原因

报错的根本原因是:不是所有以G00/G01开头的行都包含X字符,比如你提供的示例中G00 E0; no extrusion、G01 S1; endstops这类行就没有X,此时re.search("[X]", line)会返回None,对None调用start()方法就会触发AttributeError。

修复方案

方案1:保留原有获取X索引的逻辑

只需在获取索引前先判断匹配结果是否非空,也可自行设置匹配不到时的默认值:

import re
with open("example.gcode", "r") as file:
    for line in file:
        if line.startswith('G00') or line.startswith('G01'): # 筛选以G00和G01开头的行
            xindex = re.search("X", line) # 在行中搜索X字符
            if xindex:
                xindex_number = int(xindex.start()) # 获取X的起始索引并转为整数
                # 此处写匹配到X后的后续逻辑
            else:
                # 匹配不到X时可自定义默认索引值,示例设为-1
                xindex_number = -1

方案2:直接提取X坐标数值(更适配你的使用场景)

你最终目标是提取坐标值,可直接优化正则一步提取数值,无需手动计算索引:

import re
with open("example.gcode", "r") as file:
    for line in file:
        if line.startswith('G00') or line.startswith('G01'):
            # 匹配X后面的数字(兼容正负、小数格式)
            x_match = re.search(r"X([-+]?\d+\.?\d*)", line)
            if x_match:
                # 直接拿到X对应的数值
                x_value = float(x_match.group(1))
                # 此处写使用x_value的后续逻辑
            else:
                # 匹配不到X时可自定义默认值
                x_value = 0

额外优化建议

  • 若需要同时提取Y、Z、E等其他坐标,同理新增对应匹配规则即可,比如匹配Y坐标用re.search(r"Y([-+]?\d+\.?\d*)", line)
  • 若需要过滤行内注释,可先把;后面的内容去掉再做匹配,避免注释里的X干扰结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:36:03