【问题标题】:Try-except for unknown function?尝试 - 除了未知功能?
【发布时间】:2015-10-10 15:12:09
【问题描述】:

我正在尝试创建一个函数来测试一个函数是否存在,然后根据它是否存在返回一个布尔值。

这是我的代码;但是,Python IDLE 3.5 告诉我我的 eval() 语句有错误,但我看不出有什么问题:

def testFunction(entity):
    try eval(entity)():
        return True
    except NameError:
        return False

有人可以帮忙吗?

【问题讨论】:

    标签: python function python-3.x try-except


    【解决方案1】:

    您的try 声明是错误的。应该是-

    def testFunction(entity):
        try: return callable(eval(entity))
        except NameError:
            return False
    

    您也不需要调用该函数(检查它是否可用)。上面使用了内置函数callable,来检查entity是否是一个函数/类。


    但是,如果您正在检查简单函数(而不是像 module.function 这样的内置函数或模块函数),我会说最好使用 globals() 字典并在其中搜索,而不是使用 eval() 。示例 -

    def testFunction(entity):
        try: return callable(globals()[entity])
        except KeyError:
            return False
    

    请注意,以上内容不会为内置函数返回 True 或您访问的函数 - module.function 等。如果您也需要测试这些,并且如果您信任来源你得到 entity ,你可以回退到使用 eval

    【讨论】:

    • 哦,好的。但是为什么使用 globals() 而不是 eval() 更好呢?他们不是完成同样的事情吗?
    猜你喜欢
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2016-04-13
    • 2019-09-18
    • 1970-01-01
    相关资源
    最近更新 更多