Blender脚本NameError问题求助:如何将if语句内变量设为全局变量
解决Blender脚本的NameError问题:将if内变量设为全局变量
核心原因
你遇到的NameError是因为if语句里定义的变量默认是局部变量,如果在if代码块外(或函数外)调用,Python找不到这个变量就会报错。
具体解决步骤
- 函数内声明全局变量
如果你的脚本写在Blender自定义函数里,要在函数开头用global关键字声明变量,告诉Python这个变量是全局可访问的:
def my_blender_operator(): global target_variable # 声明为全局变量 if 你的判断条件: target_variable = 赋值内容 # 此时变量在脚本全局范围可用
- 给变量加初始值(避免空值报错)
如果if条件可能不触发,务必在if外先给变量设初始值,防止全局声明后却未赋值导致的错误:
def my_blender_operator(): global target_variable target_variable = None # 先设初始值 if 你的判断条件: target_variable = 赋值内容
- 非函数内的顶层代码情况
如果代码不在函数里(直接是脚本顶层代码),if内的变量本来就是全局的,报错大概率是因为if条件没满足、变量根本没被定义,同样要给变量加初始值:
target_variable = None if 你的判断条件: target_variable = 赋值内容
Blender场景示例
比如要在Blender里选中物体后赋值,修改后代码参考:
import bpy global selected_obj selected_obj = None if bpy.context.selected_objects: selected_obj = bpy.context.selected_objects[0] # 后续可正常调用变量 print(selected_obj.name)
内容的提问来源于stack exchange,提问作者Cheikh Vn
相关产品推荐
相关产品推荐

