是的,我是这篇文章的作者
所以,我试图改变这种情况:
if sys.argv[1] == 'add':
sys.exit(add(db, usr))
if sys.argv[1] == 'rem':
sys.exit(rem(db, usr))
if sys.argv[1] == 'rmusr':
sys.exit(rmusr(db, usr))
我试图用循环来改变这些条件
根据其他开发人员的回答,我使用了以下方法:
^{pr2}$但是,当我试着检查它的功能时,我有这个
File "sql.py", line 25, in <module>
sys.exit(sys.argv[1](db, usr))
TypeError: 'str' object is not callable
我不明白,哪里出错了?在
为了调用由
sys.argv[1]
命名的函数,需要先获取它。例如:在原始代码的上下文中:
^{pr2}$您的错误具体地说是因为您试图使用签名字符串(db,usr)调用方法。线系统argv[1] 是指位于程序系统中列表中的字符串。字符串不可调用;您的代码相当于:
另一个问题的答案是使用了一个字典,它的查找键与同名的特定方法相关联,因此它们没有调用字符串,而是使用字符串从字典中查找方法。在
sys.argv[1]
是str
(字符串)类型,字符串是函数。因此,当您试图执行sys.argv[1](db, usr)
时,您实际上是在试图执行一个字符串,就好像它是一个函数一样,这是不允许的。在但是,您可以使用
sys.argv[1]
内的值来查找函数。你可以用多种方法。一种方法是使用globals()
查找函数,它返回映射到实际函数本身的函数名的字典。在例如:
假设您使用以下命令执行程序:
python myScript.py argument1
。这意味着sys.argv[1]
的值是"argument1"
。然后使用这个值并在字典中查找globals()
返回的函数(或者,如果您与调用的函数在同一范围内,则可以使用locals()
):另一种方法是自己创建词典:
^{pr2}$相关问题 更多 >
编程相关推荐