python - 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 获取参数而不实际使用它的情况下解决这个问题。
解决方案
正如我对你的问题的评论,你应该编写你的函数来接受*args
和**kwargs
,但如果你坚持不使用这个约定,试试这个:
def try_cmd(cmd, params):
func = getattr(functions, cmd)
try:
func(params)
except TypeError:
func()
except Exception as error:
print(error)
在我看来,与使用异常处理来管理分支相比,接受*args
and是更好的做法。**kwargs
推荐阅读
- django - 如何在 django 中创建一个具有多个模型之一的外键的模型?
- jquery - 在悬停时显示元素延迟
- java - 如何在另一个应用程序模块中使用项目源代码
- sql - 在 UPDATE 查询中使用 IN 子句的语法错误
- javascript - Mongoose connectio occured MongoNetworkError: connection 0 to cluster0-shard-00-01-utzss.mongodb.net:27017 closed error
- core-audio - Core Audio MIDI Synth AU & MusicPlayer - Cannot be pulled by AudioUnitRender programmatically
- scala - Why the code is not producing the output as it is supposed to be in the logic implemented?
- firebase - Flutter Retrieve Data from Firebase
- opencv - opencv resize window for a live cam
- javascript - please tell me how to write code for chrome extension to be in full screen