尝试使用 globals() 获取变量值时出现 KeyError

问题描述 投票:0回答:1

我正在为 Ren'Py 游戏编写一个简单的 mod(以显示“隐藏”变量)。

有关此类变量的信息保存在字典列表中;像这样(简化):

icm_data_rowan = [
    {
        'name' : 'Rowan corruption',
        'var_name' : 'avatar.corruption' # Variable's name in the game
        # Other keys/values
    },
    # Other variables
]

有一个 Python 函数可以检索这些变量的值并将字符串组合在一起以显示在 Ren'Py 屏幕中:

def icm_refresh_content():
    global icm_txt
    icm_txt = ''
    icm_data = ICM_data() # Class I'm keeping my variables
    icm_content = icm_data.icm_choose_data(icm_content_to_show) # Function to choose a variables list to show (works fine)
    for entry in icm_content:
        # print('entry['var_name']') # Testing
        try:
            icm_var = globals()[entry['var_name']] # That seems to be a problem!
        except KeyError:
            icm_var = 'NA'
        icm_txt += '{b}' + entry['name'] + ': {color=#FBD315}' + str(icm_var) + '{/color}{/b}{p}'

这总是会导致 KeyError/

icm_var = 'NA'
(
KeyError: 'avatar.corruption'
)。

我当然希望在游戏中检索这些变量的值。当我在 Ren'Py 控制台中简单地输入变量名称(例如

avatar.corruption
)时,我会得到正确的值。当我在控制台中打印
entry['var_name']
时(#测试行),我得到了名称(如
avatar.corruption
)。所以我猜
globals()[entry['var_name']]
是这里的问题吗?我错过了什么/做错了什么?

python keyerror renpy
1个回答
1
投票

avatar.corruption
是一个复合名称;全局变量中仅存在基本名称
avatar

从全局变量中获取

avatar
,然后作为单独的步骤获取其
corruption
属性。

getattr(globals()['avatar'], 'corruption')
© www.soinside.com 2019 - 2024. All rights reserved.