调用Python包时出现NameError: name 'hg38' is not defined错误求助
解决
NameError: name 'hg38' is not defined错误 问题根源
- Python中,函数内部用
global关键字声明的变量,属于该函数所在模块的全局命名空间,而非调用该模块的脚本的全局命名空间。 - 以你提供的简化示例为例:
global_var_test.py里的hg38是global_var_test模块的全局变量,你在调用脚本里直接写hg38,Python会在当前脚本的命名空间中查找该变量,自然找不到,因此触发NameError。
解决方案
针对简化示例
修改调用脚本,从模块命名空间中引用hg38变量:
import global_var_test global_var_test.print_sth() # 从模块中获取hg38变量传入函数 global_var_test.process_del(global_var_test.hg38)
针对ORCA仓库的实际场景
- 先调用初始化
hg38的函数(仓库代码中是load_genome),确保模块级hg38变量被创建; - 调用
process_dup时,从orca_predict模块中引用hg38,而非直接使用hg38:
import orca_predict # 初始化hg38变量 orca_predict.load_genome() # 从模块中传入hg38参数 outputs = orca_predict.process_dup('chr17', 70845859, 71884859, orca_predict.hg38, file='./chr17_70845859_71884859_RevSex_dup_maximum_Sox9', show_genes=True)
补充说明
原仓库的README文档存在疏漏,未明确说明hg38是模块级全局变量,需要从模块中引用。从代码规范角度,更合理的实现应该让初始化函数返回hg38对象,而非依赖模块全局变量,避免这类作用域混淆的问题。
内容的提问来源于stack exchange,提问作者mrq
相关产品推荐
相关产品推荐

