主文件是aaa.py,代码如下:
import os,time
from get_newest_folder import *
def main_test():
print(newest_folder)
print(path)
if __name__ == '__main__':
get_n_folder()
main_test()
另一个文件是get_newest_folder.py,代码如下:
import os
def get_n_folder():
path = 'D:\\Test'
os.chdir(path)
files = sorted(os.listdir(os.getcwd()), key=os.path.getmtime)
newest_folder = files[-1]
return (path, newest_folder)
if __name__ == '__main__':
get_n_folder()
我试图在aaa.py中使用get_newest_folder.py中的变量“ path”和“ newest_folder”,所以我导入了“ get_newest_folder”。但是我无法获取(打印)aaa.py中的2个变量。当我运行aaa.py时,它将显示以下错误消息:
NameError:未定义名称“ newest_folder”
任何人都可以更正我的代码或给我一些建议吗? 非常感谢。
答案 0 :(得分:0)
为了访问newest_folder和路径,必须在get_newest_folder.py中将它们声明为全局变量,并将这些变量导入aaa.py。目前,它们是局部变量。
但这不是解决问题的理想方法。可能您需要这样的东西
import os,time
from get_newest_folder import *
def main_test():
_path, _newest_folder = get_n_folder()
print(_path)
print(_newest_folder)
if __name__ == '__main__':
main_test()
答案 1 :(得分:0)
修改您的aaa.py
import os,time
from get_newest_folder import *
def main_test():
path,newest_folder = get_n_folder()
print(newest_folder)
print(path)
if __name__ == '__main__':
main_test()
答案 2 :(得分:0)
首先,要回答您的问题,您需要修改模块:
import os
newest_folder = '' # <<<<
path = '' # <<<<
def get_n_folder():
global newest_folder # <<<<
global path # <<<<
....
# The rest is unchanged
变量现在是模块的属性,以前它们只是函数的属性。
因此,它消除了错误消息,但只显示了两个空白行!!!为什么?由于尚未设置newest_folder
和path
,因此您无需调用该函数即可填充值!
这是一个问题,另一个是from get_newest_folder import *
。不要那样做-它会污染您自己的名称空间。它为模块提供了覆盖您自己的变量的机会(名称空间冲突)。很好,您知道这个模块,但是您会永远吗?您知道您导入的每个模块中的变量都很大吗?
所以:
import get_newest_folder
def main_test():
print(get_newest_folder.newest_folder)
print(get_newest_folder.path)
if __name__ == '__main__':
get_newest_folder.get_n_folder()
main_test()
但是,正如其他人所说,最好不要共享变量,如果这样做,则意味着模块实现无法更改-破坏了封装。在某些情况下可能是合理的,但在这里没有。
相反,请使用您的原始 get_newest_folder.py
:
import os,time
import get_newest_folder
def main_test():
print(newest_folder)
print(path)
if __name__ == '__main__':
print(dir())
newest_folder, path = get_newest_folder.get_n_folder()
main_test()