str值到变量名称和赋值的引用



我正在制作一个CLI程序。所以我需要用户看到他们的参数已经改变。然后,我存储了一个元数据文件,其中显示了他们的params pass与实际运行的params,以及其他信息。

我希望能够执行无拖尾异常处理,其中我的程序确保一组确定性的变量值每个都满足其最低要求。

到目前为止,我有这个:

def my_function(datasets, samples, columns, n_cks, cks_length, non_unique):
exception_handling = [['datasets', 1], ['samples', 2], ['columns', 3], ['n_cks', 1], ['cks_length', 2], [non_unique, 0.01]]
for param, minim_req in exception_handling:
if not exec(param) >= minim_req:
exec(param) = minim_req
print("'" + str(param) + "' was too small...")
print("'" + str(param) + "' = " + minim_req)

错误:

SyntaxError: cannot assign to function call

在两个位置尝试eval()而不是exec()时出现相同错误。


在阅读了使用locals()之后,我在这里也遇到了麻烦。

解决方案2-使用locals():

def my_function(datasets, samples, columns, n_cks, cks_length, non_unique):
#exception_handling = [['datasets', 1], ['samples', 2], ['columns', 3], ['n_cks', 1], ['cks_length', 2]]
minim_req = {'datasets': 1, 'samples': 2, 'columns': 3, 'n_cks': 1, 'cks_length': 2, 'non_unique': 0.01}

params = locals()
print(params)

for key, value in params:
if not value >= minim_req[key]:
params[key] = minim_req[key]
print("'" + str(key) + "' was too small...")
print("'" + str(key) + "' = " + minim_req[key])

错误:

ValueError: too many values to unpack (expected 2)

如果所有变量都是int,请尝试以下操作:

for param, minim_req in exception_handling:
length = exec(param)
if length < minim_req:
# Do something with 'length'
datasets, samples, columns, n_cks, cks_length, non_unique = 0, 0, 0, 0, 0, 0.0
params = [['datasets', datasets], ['samples', samples], ['columns', columns], ['n_cks', n_cks], ['cks_length', cks_length], ['non_unique', non_unique]]
minim_req = [1, 2, 3, 1, 2, 0.01]
for (i, val), m in zip(enumerate(params), minim_req):
if not val[1] >= m:
params[i][1] = m
print("'" + params[i][0] + "' was too small...")
print("'" + params[i][0] + "' = " + str(m) + "n")

datasets, samples, columns, n_cks, cks_length, non_unique = params[0], params[1], params[2], params[3], params[4], params[5]
print(datasets, samples, columns, n_cks, cks_length, non_unique)
>>> 1 2 3 1 2 0.01

这里唯一的问题是它依赖于一组静态/固定的变量名;这对我来说已经足够了。

最新更新