【发布时间】:2014-03-11 17:44:16
【问题描述】:
如何在 Python2.7 中将用户生成的字符串转换为方法或函数调用?你可以搜索 dir(object) 以查看方法/函数是否存在然后调用该方法吗?
【问题讨论】:
如何在 Python2.7 中将用户生成的字符串转换为方法或函数调用?你可以搜索 dir(object) 以查看方法/函数是否存在然后调用该方法吗?
【问题讨论】:
最好只是尝试调用该方法,如果它不存在它会抛出一个异常,你可以处理。
>>> try: obj.a_method()
... except AttributeError: print 'No method a_method in this object'
...
No method a_method in this object
>>>
【讨论】:
你可以试试这样的:
ui = input("Try something: ")
if ui in dir():
func = eval(ui)
func()
例如:
>>> def test():
return "foo"
>>> if "test" in dir():
func = eval("test")
func()
'foo'
【讨论】:
dir,所以只会执行存在的对象,eval 是安全的吗?
evaling 任意字符串更安全
函数名只是属性,所以你可以这样做:
try:
getattr(object, methodname)()
except AttributeError as e:
print 'Method %s not found or not callable!'%methodname
【讨论】:
你可以使用globals它返回模块的__dict__
def command_1():
print "You are in command 1"
def command_2():
print "You are in command 2"
def default():
print "Can't find your command"
func = raw_input("ENTER YOUR COMMAND: ")
your_func = globals().get(func, None)
if your_func is None:
your_func = default
your_func()
ENTER YOUR COMMAND: command_1
You are in command 1
或
ENTER YOUR COMMAND: aaa
Can't find your command
【讨论】: