使用TCL for循环创建多个组件时如何跳过报错继续执行
TCL循环创建组件跳过已存在对象的调整方案
你的现有代码问题在于先执行创建命令再做错误捕获,此时如果目标组件已存在,创建命令会直接报错退出,根本不会进入后续的catch判断逻辑。正确写法是将创建命令放入catch块内,由catch捕获创建失败的错误,捕获到错误后直接执行continue进入下一轮循环即可,不需要额外手动递增i,for循环本身的增量逻辑会自动执行。
调整后的完整代码如下:
for {set i 10} {$i < 20} {incr i} { # 将创建命令放入catch块捕获错误 if {[catch {*createentity comps name=pshell.$i id=$i} err_msg]} { # 可选:打印跳过提示,不需要可删除 puts "组件pshell.$i已存在,跳过创建" # 直接进入下一轮循环,不要手动加incr i,避免跳步 continue } # 仅创建成功时执行后续逻辑 puts "已成功创建组件pshell.$i" }
补充说明
- 不需要在
continue前手动执行incr i,for循环的第三个表达式incr i会在每次循环结束后自动触发,手动加会导致i每次递增2,跳过正常待创建的序号 - 如果不需要捕获错误信息,可以简化
catch写法为if {[catch {*createentity comps name=pshell.$i id=$i}]},不用接收err_msg变量
内容的提问来源于stack exchange,提问作者Seçkin Uslu
相关产品推荐
相关产品推荐

