在if\uyu name_u==“main”中访问变量

2024-09-30 02:33:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个程序,在一系列测试中比较两个类。在

主程序(称为初始.py)将这两个值赋给字典

import testcheck

values = {}
valueChange = False

if __name__ == "__main__":
    values['valueOne'] = testcheck.assignValue()       #see note 1
    values['valueTwo'] = testcheck.assignValueTwo()    
    testcheck.checkValues()                            #see note 2

    while valueChange is True :
        values['valueTwo'] =   testcheck.assignValueTwo()
        testcheck.checkValues()

注1:这两个函数都返回相同的类,但值不同

注2:比较两个类。在一系列测试之后,valueChange被设置为True,并使用此代码删除一个值

^{pr2}$

这将返回错误

del initial.values['valueTwo']
KeyError: 'valueTwo'

我认为这是因为添加valueOne和valueTwo会将其添加到本地范围内,但即使使用全局值也无法修复它。我该怎么解决这个问题呢?在


Tags: pyimport程序true字典notevaluessee
1条回答
网友
1楼 · 发布于 2024-09-30 02:33:33

这似乎是一个设计问题。你似乎在设置循环导入,如果可能的话应该避免。如果您想要的是在包的各个模块之间共享全局状态,那么您可能需要利用将状态存储在testcheck模块中,而不是存储在initial.py的全局变量中

测试检查.py

# module globals
_TEST_VALUES = {}
valueChanged = False

...

def getTestValue(name):
    return _TEST_VALUES.get('name', None)

def assignValue():
    # do stuff
    result = 'foo'
    _TEST_VALUES['valueOne'] = result
    return result

def assignValueTwo():
    # do stuff
    result = 'bar'
    _TEST_VALUES['valueOne'] = result
    return result

...

初始.py

^{pr2}$

其他模块.py

^{3}$

我不知道这整件事的实际用途。但也许这会让你知道从哪里开始寻找。不再有其他模块的循环导入初始.py入口点。您正在testcheck模块中存储所有全局变量。这个例子既快又脏。这只是为了说明。在

任何模块都不应该试图访问另一个处理if __name__ == "__main__"块内数据的模块的数据。因为现在您假设它将始终用作入口点(从不被其他东西导入),并且开始对代码施加限制。在

相关问题 更多 >

    热门问题