我正在为 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']]
是这里的问题吗?我错过了什么/做错了什么?
avatar.corruption
是一个复合名称;全局变量中仅存在基本名称 avatar
。
从全局变量中获取
avatar
,然后作为单独的步骤获取其 corruption
属性。
getattr(globals()['avatar'], 'corruption')