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

Rhino Python脚本:字符串切片end=0失效的原因与修复方案

问题原因与解决方法

原代码的两个核心问题

  1. 函数调用错误:rs.GetInteger是用于获取整数输入的函数,你没有加括号调用(正确写法是rs.GetInteger()),这会导致start和end被赋值为函数对象,而非你实际输入的整数值,后续执行字符串切片时会直接抛出类型错误。

  2. 切片逻辑不符合需求:当你输入end=0时,代码里end = -end计算后还是0。在Python字符串切片语法中,name[start:0]表示从start索引位置截取到索引0的位置(不包含该位置),如果start是正数(比如示例中的5),这是一个反向的无效区间,会返回空字符串,完全不符合你想要截取到字符串末尾的需求。

举个实际例子:对象名称是123456789,输入start=5、end=0,原代码(假设修复了函数调用问题)执行name[5:0],结果是空,而不是你预期的6789。

解决方法

针对上述两个问题,我们需要做两处修改:

  • 给rs.GetInteger加上括号,确保调用函数获取输入的整数值;
  • 将输入的0转换成None,因为Python切片中,None在start位置表示从开头截取,在end位置表示截取到末尾。

修改后的正确代码如下:

start = rs.GetInteger()
if start == 0:
    start = None
end = rs.GetInteger()
end = -end
if end == 0:
    end = None

objectIDs = rs.GetObjects("Pick some object")

for singleID in objectIDs:
    name = rs.ObjectName(singleID)
    name = name[start:end]
    rs.ObjectName(singleID, name)

代码逻辑说明

  • 当输入start=0时,将start设为None,此时name[None:end]等价于name[:end],对应示例中输入0和4得到12345的需求(end=-4,name[:-4]正好是前5个字符)。
  • 当输入end=0时,将end设为None,此时name[start:None]等价于name[start:],对应示例中输入5和0得到6789的需求(从索引5开始截取到末尾)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:10:34