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
相关产品推荐
相关产品推荐

