Python跨文件获取函数内全局变量遇NameError,求解决方案
解决跨模块访问全局变量的问题
错误原因
file_a.py中的date1、date2是file_a模块的全局变量,并非file_b.py的全局变量。即便调用了file_a.timestamp()初始化这些变量,在file_b里直接写date1依然会找不到,因为当前作用域不存在这个变量名。
方案1:通过模块名访问全局变量
直接通过导入的模块对象访问其全局变量,修改file_b.py如下:
import file_a # 调用模块内的函数初始化全局变量 file_a.timestamp(value1, value2) # 通过模块名访问目标变量 get_date = file_a.date1
方案2:推荐——让函数返回结果(避免依赖全局变量)
全局变量容易引发不可预期的问题(比如被其他代码意外修改),更规范的做法是让timestamp函数直接返回需要的日期值:
修改file_a.py:
def timestamp(value1, value2): # 移除global声明 (...) # 注意:日期要加引号,否则01/01/01会被解析为除法运算(结果是1.0) date1 = "01/01/01" date2 = "02/02/02" # 返回需要的变量 return date1, date2
修改file_b.py:
import file_a # 调用函数并接收返回值 date1, date2 = file_a.timestamp(value1, value2) get_date = date1
额外提示
原代码中date1 = 01/01/01会被Python解释为(1)/(1)/(1),最终结果是1.0,如果要表示日期字符串,必须加上引号,写成"01/01/01"。
内容的提问来源于stack exchange,提问作者Juliana Foschiera
相关产品推荐
相关产品推荐

