TypeError:“str”对象在python脚本中不可调用

2024-09-24 02:17:58 发布

您现在位置:Python中文网/ 问答频道 /正文

是的,我是这篇文章的作者

所以,我试图改变这种情况:

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

我不明白,哪里出错了?在


Tags: adddbif开发人员usrsysexit情况
3条回答

为了调用由sys.argv[1]命名的函数,需要先获取它。例如:

def add(x,y):
    return x + y

def mul(x,y):
    return x * y

def perform(action, x, y):
    # action is a string containing a function name ("add" or "mul").
    # globals() contains the accessible members, along with the functions.
    return globals()[action](x, y)

在原始代码的上下文中:

^{pr2}$

您的错误具体地说是因为您试图使用签名字符串(db,usr)调用方法。线系统argv[1] 是指位于程序系统中列表中的字符串。字符串不可调用;您的代码相当于:

"add"(db, usr)  # add is not a variable name.

另一个问题的答案是使用了一个字典,它的查找键与同名的特定方法相关联,因此它们没有调用字符串,而是使用字符串从字典中查找方法。在

sys.argv[1]str(字符串)类型,字符串是函数。因此,当您试图执行sys.argv[1](db, usr)时,您实际上是在试图执行一个字符串,就好像它是一个函数一样,这是不允许的。在

但是,您可以使用sys.argv[1]内的值来查找函数。你可以用多种方法。一种方法是使用globals()查找函数,它返回映射到实际函数本身的函数名的字典。在

例如:

假设您使用以下命令执行程序:python myScript.py argument1。这意味着sys.argv[1]的值是"argument1"。然后使用这个值并在字典中查找globals()返回的函数(或者,如果您与调用的函数在同一范围内,则可以使用locals()):

sys.exit(globals()[sys.argv[1]](db, usr))

另一种方法是自己创建词典:

^{pr2}$

相关问题 更多 >