Python 3:使str对象可调用

brtdzjyr  于 2023-05-27  发布在  Python
关注(0)|答案(2)|浏览(125)

我有一个接受用户输入的Python程序。我将用户输入存储在一个名为“userInput”的字符串变量中。我希望能够调用用户输入的字符串。。

userInput = input("Enter a command: ")
userInput()

从这里,我得到了错误:TypeError:“str”对象不可调用
目前,我的程序正在做这样的事情:

userInput = input("Enter a command: ")
if userInput == 'example_command':
    example_command()

def example_command():
     print('Hello World!')

显然,这不是处理大量命令的非常有效的方法。我想让str对象可调用-无论如何要这样做吗?

nuypyhwy

nuypyhwy1#

更好的方法可能是使用dict:

def command1():
    pass

def command2():
    pass

commands = {
    'command1': command1,
    'command2': command2
}

user_input = input("Enter a command: ")
if user_input in commands:
    func = commands[user_input]
    func()

    # You could also shorten this to:
    # commands[user_input]()
else:
    print("Command not found.")

本质上,您提供了文字命令和您可能想要运行的函数之间的Map。
如果输入太多,你也可以使用local关键字,它将返回每个函数、变量等的字典。当前范围内当前定义的:

def command1():
    pass

def command2():
    pass

user_input = input("Enter a command: ")
if user_input in locals():
    func = locals()[user_input]
    func()

但这并不完全安全,因为恶意用户可能输入与变量名相同的命令,或者您不希望他们运行的某些函数,并最终导致代码崩溃。

2ledvvac

2ledvvac2#

你可以使用exec方法来实现。
exec命令执行字符串。

user_input = input()        # example command
exec(user_input + '()')     # append the function parenthesis

您必须记住,允许用户在没有适当验证的情况下执行代码是危险的。

相关问题