如何在我的函数中替换`eval`?

1 投票
2 回答
3435 浏览
提问于 2025-04-17 20:40

我知道在Python中使用eval并不是一个好的做法。以下是我的代码:

from hashlib import * # added for clarification
def get_hash(self):
        if self.hash_type in ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512']:
            data = eval(self.hash_type) # <--- how can I replace this?

我听说过setattr这个函数,但老实说我不知道怎么用。

请问用map函数也能做到这个吗?

需要注意的是,'md5', 'sha1', 'sha224'等都是局部变量。当我对其中一个使用eval函数时,它们就变成了函数。

2 个回答

3

为什么不把所有的信息都存储在一个字典里呢?比如:

self.hash_types = {
    'md5': md5,
    'sha1': sha1,
    ...
}

然后在 get_hash 这个函数里:

def get_hash(self):
    if self.hash_type in self.hash_types:
        data = self.hash_types[self.hash_type]

另外,

def get_hash(self):
    data = self.hash_types.get(self.hash_type, self.DEFAULT)
6

你可以使用 getattr 这个函数:

import hashlib
if self.hash_type in ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512']:
     func = getattr(hashlib, self.hash_type)

撰写回答