我想检查__builtins__
中列出的内容是否从True
返回callable
(作为测试它们是否为函数的方法)。我希望在Python文档中返回those函数列表。我意识到其他项目,例如AttributeError
会为True
返回callable
,这很好。
以下内容在我致电时会返回SyntaxError
(由于eval(print)
):
[callable(eval(x)) for x in dir(__builtins__)]
SyntaxError: unexpected EOF while parsing
如何在回避__builtins__
引发的错误时测试eval(print)
中哪些是可调用函数?
答案 0 :(得分:3)
您应该使用getattr
代替eval
:
builtins = map(lambda obj: getattr(__builtins__, obj), dir(__builtins__))
然后你可以过滤callables的结果:
filter(callable, builtins)
请注意,也可以使用inspect.getmembers。它甚至允许使用可选参数来过滤结果:
inspect.getmembers(__builtins__, callable)
答案 1 :(得分:2)
更有效的方法是使用getattr
:
>>> [callable(getattr(__builtins__, attr)) for attr in dir(__builtins__)]
[True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, True, True, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, True, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, True, True, True, True, True, True, True, True, True, True, True, False, True, False, False, True, True, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True]
>>>