我尝试在用户输入时从图像中调用模块(。)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'
答案 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