【问题标题】:How to end a method in a class if user input is blank如果用户输入为空,如何结束类中的方法
【发布时间】:2019-12-15 15:28:01
【问题描述】:

我是编程新手,所以请多多包涵! 我正在创建一个类,但无法在用户输入为空时显示返回消息。
而不是返回我的消息,它只是给我一个错误。

如果用户输入为空白,我希望我的代码返回“请重试”并结束。

代码:

class BankAccount():

    def __init__(self):
        # asking for a name
        self.name = str(input("Hello! Welcome to the Bank of Alex.\nWhat is your name?"))
        if self.name == "":
            return "please try again"
        else:
            print(f"\nWelcome, {self.name.title()}.")

TypeError Traceback(最近一次调用最后一次) 在 ----> 1 个账户 = BankAccount()

TypeError: init() 应该返回 None,而不是 'str

【问题讨论】:

  • __init__ 不是您想的那样。您可能打算编写一个__main__ 函数。见this question

标签: python class return


【解决方案1】:

您的程序结构不适合使用类。在您知道输入有效之前,您不应该创建对象。让调用程序检查它:

name = ""
while name == "":
    name = input("Enter your name")
    if name:
        acct = BankAccount(name)
        break
    else:
        print("Please try again")

然后您的__init__ 方法只会创建帐户——不检查名称。该方法隐式返回创建的对象;你不能退回任何东西。

【讨论】:

  • 这样说“不要这样做”的方式很好,很有礼貌
  • @Evgeny:不——它只是展示了我们在过去半个世纪左右的时间里如何学会划分我们的功能。在这种情况下,它只是在等待:在我们确定所有必需的参数之前,不要费心创建新对象。
  • 谢谢!这有效,但现在它向我抛出了一条新的错误消息 TypeError: BankAccount() 不接受我尝试使用 BankAccount(self) 和 BankAccount(name) 的参数,但这似乎也不起作用。
  • 您需要调整您的类,以便__init__ 将提供的名称作为参数:def __init__(self, name): ...
【解决方案2】:

我在@Prune 的帮助下解决了这个问题。我用了他提到的while循环,放在了__init__下面

因此,如果用户输入为空白,它将一直提示输入。不是一个完美的解决方案,但它有效。

class BankAccount():

    def __init__(self):
        self.name = input("Hello! Welcome to the Bank.\nWhat is your name?")
        while self.name == "":
            self.name = input("Please enter your name")
        if self.name:
            print(f"\nWelcome, {self.name.title()}.")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-31
    • 2021-12-31
    • 1970-01-01
    • 2017-04-20
    • 2018-06-14
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多