首页 > 解决方案 > python使用getattr的更通用的解决方案

问题描述

假设我有一个包含以下内容的测试文件:

def a():
    print('this is a')

def b(x):
    print(x)

还有一个主文件:

import test


def try_cmd(cmd, params):
    try:
        getattr(functions, cmd)(params)
    except Exception as error:
        print(error)


while True:
    cmd = input('Enter cmd')
    params = input('Enter params')
    do_command(cmd, params)

代码的目的应该是尝试从不同的文件中调用一个函数,用户给出函数名称,如果需要的话,它可以使用参数。如果 cmd 的值为 'a' 并且 parmas 是随机字符串,do_command 将不起作用,因为函数 a 不接受参数。但是,如果 cmd 将是 'b' 并且 params 会说 '5' 它将起作用。我如何在不强制 a 获取参数而不实际使用它的情况下解决这个问题。

标签: pythongetattr

解决方案


正如我对你的问题的评论,你应该编写你的函数来接受*args**kwargs,但如果你坚持不使用这个约定,试试这个:

def try_cmd(cmd, params):
    func = getattr(functions, cmd)
    try:
        func(params)
    except TypeError:
        func()
    except Exception as error:
        print(error)

在我看来,与使用异常处理来管理分支相比,接受*argsand是更好的做法。**kwargs


推荐阅读