Python 3: Making a str object callable

callable, object, python, string

Solution

A better method might be to use a 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.")

Essentially, you're providing a mapping between the literal command, and the function you might want to run.

If that's too much typing, you could also use the `local` keywords, which will return a dictionary of every function, variable, etc. currently defined within the current scope:

def command1():
    pass

def command2():
    pass

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

This isn't entirely secure though, because a malicious user could enter a command which is the same as a variable name, or some function you don't want them to run, and end up crashing your code.

Problem

I have a Python program that takes user input. I store user input a string variable called "userInput". I want to be able to call the string the user entered... ``` userInput = input("Enter a command: ") userInput() ``` From this, I get the error: TypeError: 'str' object is not callable Currently, I have the program doing something like this: ``` userInput = input("Enter a command: ") if userInput == 'example_command': example_command() def example_command(): print('Hello World!') ``` Clearly this isn't a very efficient way to process a lot of commands. I want to make the str obj callable - anyway to do so?

Original source