'str' 对象在 python 中不可调用

'str' object is not callable in python

我在 password() 函数中调用这个函数 password(),希望它能重新开始。然后是 'str' 对象错误。

代码:

import time

def sleepFor(sleepForInt):
    time.sleep(sleepForInt / 1000)

def newScreen(): # adte it says
    for itemNew in range(26): 
        print("\n")

def logo(): #  ^~-
    newScreen()

    print("\t\t\t\tLeigh Studio")
    indent(6)

    return None

def indent(space): # adte it says
    for item in range(space):
        print("\n")

def password():
    userName = input("Enter registered UserName > ")
    user = userName

    indent(1)
    if userName == "leigh flix":
        confirm = input("Confirm UserName (y/n) > ")
        indent(2)

        if confirm == "y":
            password = input("\tenter password ) ")

            if password == "comics123":
                menu()

            else:
                print("Password is Incorrect")
                sleepFor(2000)
                password()
        else:
            password()
    else:
        print("No registered UserName as: " + user)
        sleepFor(2000)
        password()

def printID():
    print("C:/users/" + user)

def menu():
    response = input(printID())

    while response != "quit":

        if response == "time":
            time.ctime()

def main(): # main method
    logo()
    sleepFor(1200)
    newScreen()

    password()


# ___Runs program___
main()

错误:

不知道是在说userName = input("Enter registered userName")还是别的什么。哦,顺便说一句,这不是编译错误而是运行时错误,如果我没有输入正确的密码(即 'comics123')。

我要问的问题 是否有不同的方式调用 password() 在没有出现此错误的情况下运行,或者在密码不正确时重复询问用户的方法。提前致谢。

您的问题出在这一行:

password = input("\tenter password ) ")

在该范围内的 password 这一行之后是这个字符串变量,而不是函数。只需将此变量重命名为其他名称即可解决此问题。

    if confirm == "y":
        password = input("\tenter password ) ")

您在这里定义了一个名为 password 的变量,它隐藏了在顶层定义的 password() 函数。

        if password == "comics123":
            menu()

        else:
            print("Password is Incorrect")
            sleepFor(2000)
            password()

在这里,您尝试调用作为输入获得的字符串,就好像它是一个方法一样。

您需要做的是为字符串和函数使用不同的名称。我建议将函数调用为 request_passwordinput_password.

password() 调用失败,因为您错误地选择将标识符 password 覆盖为局部变量(通过 password = input("\tenter password ) ") 语句!),因此隐藏了全局(函数)名字与之吻合。对局部变量使用 different 标识符,例如 passwd = input("\tenter password ) ") (然后当然使用 passwd 来引用刚刚输入的字符串!-)你会没事。