相关疑难解决方法(0)

为什么使用'eval'是一种不好的做法?

我正在使用以下课程轻松存储我的歌曲数据.

class Song:
    """The class to store the details of each song"""
    attsToStore=('Name', 'Artist', 'Album', 'Genre', 'Location')
    def __init__(self):
        for att in self.attsToStore:
            exec 'self.%s=None'%(att.lower()) in locals()
    def setDetail(self, key, val):
        if key in self.attsToStore:
            exec 'self.%s=val'%(key.lower()) in locals()
Run Code Online (Sandbox Code Playgroud)

我觉得这比写出一个if/else块更具可扩展性.但是,eval似乎被认为是一种不良做法并且使用起来不安全.如果是这样,任何人都可以向我解释为什么并告诉我一个更好的方法来定义上面的类?

python eval

125
推荐指数
6
解决办法
3万
查看次数

在Python中使用eval?

eval()Python中有一个函数我在玩游戏时偶然发现.我不能想到需要这个功能的情况,除了可能是语法糖.谁能举个例子?

python eval dynamic

23
推荐指数
5
解决办法
4万
查看次数

将字符串设置为变量名称

可能重复:
如何在Python中使用与对象名称相同的字符串来访问对象本身?

我正在尝试根据匹配结果将名称更改为变量...

inds_EUR = [whatever]
inds_AFR = [foo]
inds_ASN = [other]

pop=inds_EUR ##imagine this is the case
for pp in ('EUR', 'AFR', 'ASN'):
    if pp in pop:
    paap='inds_'+str(pp)        
    break
foos=eval(paap)
Run Code Online (Sandbox Code Playgroud)

我正在尝试的是将"foos"设置为传递给此表达式的列表

matches = [item for item in inds_vcf if item in foos]
Run Code Online (Sandbox Code Playgroud)

它工作,但不知道使用这个eval()表达式是否危险,这里可能是因为它使用vars()我是以正确的方式做到的吗?

提前致谢,

佩希

python string eval

1
推荐指数
1
解决办法
465
查看次数

标签 统计

eval ×3

python ×3

dynamic ×1

string ×1