如何检查在Python中使用Walrus操作符时是否按下了Enter键?

如何检查在Python中使用Walrus操作符时是否按下了Enter键?,python,python-3.x,walrus-operator,Python,Python 3.x,Walrus Operator,我正在尝试使用Walrus操作符:=,从用户那里获取输入,但是如果用户只将Enter键键入为input,python脚本将终止。如何捕获此错误并确保用户不仅按了Enter键 有,但使用海象操作符不起作用 不带walrus操作员的该代码将成功检查是否仅按下了Enter键: while True: answer = input("Please enter something: ") if answer == "": print(

我正在尝试使用Walrus操作符
:=
,从用户那里获取输入,但是如果用户只将Enter键键入为
input
,python脚本将终止。如何捕获此错误并确保用户不仅按了Enter键

有,但使用海象操作符不起作用

不带walrus操作员的该代码将成功检查是否仅按下了Enter键:

while True:
    answer = input("Please enter something: ")
    if answer == "":
        print("Invalid! Enter key was pressed.")
        continue
    else:
        print("Enter wasn't pressed!")
        # do something
如果用户只按Enter键,则整个脚本将终止

while answer := input("Please enter something: "):
    # if user pressed only `Enter` script will terminate. following will never run
    if answer == "":
        print("enter was pressed")
    else:
        print("Enter wasn't pressed!")
        # do something

代码中发生了什么

第1部分:

之所以会出现这种情况,是因为此语句
answer:=input(“请输入某物”)
获取输入值并分配给变量
answer
。如果按
Enter
,则
answer
的值为空字符串

第二部分:
while
循环计算值。由于该值为空字符串,且空字符串的值为false,因此将退出循环


我们无法使用walrus运算符执行此操作,因为控件从未进入循环,而且您希望检查输入字符串的值,您可以编写以下代码:

while(答案:=输入(“请输入内容”)!=0:
#如果用户只按“回车”,脚本将终止。跟踪永远不会运行
如果答案==“”:
打印(“按回车键”)
其他:
打印(“未按Enter!”)
#做点什么

这意味着0将始终满足。

您将赋值表达式放在了错误的位置。原始循环是无限的,但第二个循环使用
answer
作为中断条件

while True:
    if not (answer := input("Type something: ")):
        print("You didn't type anything before pressing Enter!")
        continue
    print("You typed:", answer)
同样,由于我们使用的是
continue
,因此不需要
else
子句

在行动中:

键入:你好!
你输入:你好!
键入以下内容:
在按Enter键之前,您没有键入任何内容!
输入:嗨!
你打字了:嗨!
然而,在这里使用walrus操作符并没有真正的优势,所以我会避免使用它

while True:
    answer = input("Type something: ")
    if not answer:
        print("You didn't type anything before pressing Enter!")
        continue
    print("You typed:", answer)

显然,walrus操作符不适合这个用例。它也不会使代码更短或更可读。您的原始(工作)解决方案更优越。
Enter
只会创建一个长度为零的字符串,对于while循环,该字符串的计算结果将为
False
,因此该块将在不执行的情况下退出。这是对walrus运算符的一个糟糕的使用。在True:answer=input()时执行
会更加清晰,就像OP最初所做的那样。