从用户输入调用module.Functionname

时间:2016-10-03 21:36:59

标签: python function

我尝试在用户输入时从图像中调用模块(。)functionname。 例如,用户输入 " GaussianBlurr"

我希望能够替换( ImagerFilter.user_input )并调用该过滤器。(第3行)

def ImageFilterUsingPil():
    im = Image.open('hotdog.jpg')
    im.filter(ImageFilter.GaussianBlur) # instead im.filter(ImageFilter.user_input)
    im.save('hotdog.png')

我也试过这个

user_input = 'GaussianBlur'
def ImageFilterUsingPil():
    im = Image.open('hotdog.jpg')
    im.filter(ImageFilter.user_input) 
    im.save('hotdog.png')
它扔了我AttributeError: 'module' object has no attribute 'user_input'

1 个答案:

答案 0 :(得分:0)

您希望在此处使用getattr

call = getattr(ImageFilter, user_input)
call()

您的代码更明确,您可以这样做:

im.filter(getattr(ImageFilter, user_input)()) 

简单示例:

>>> class Foo:
...     @classmethod
...     def bar(cls):
...         print('hello')
...
>>> getattr(Foo, 'bar')()
hello

但是,您可能希望确保在发送无效内容时处理异常。因此,您可能应该尝试使用try/except调用该方法。

>>> try:
...     getattr(Foo, 'bar')()
... except AttributeError:
...     # do exception handling here

您还可以将默认值指定为None(我个人更愿意(EAFP),然后在调用之前检查它是否为None

call = getattr(ImageFilter, user_input, None)
if call:
    call()
else:
    # do fail logic here