繁体   English   中英

'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 ) ")语句!),因此隐藏了与此一致的全局(函数)名称。 对本地变量使用不同的标识符,例如passwd = input("\\tenter password ) ") (然后当然使用passwd来指代刚刚输入的字符串!-),就可以了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM