You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python控制台条件判断异常:输入不匹配却执行elif分支

问题描述

我开发了一个Python控制台程序,预期输入任意内容会存入Console变量,输入未定义命令(如"vfdv")时应进入else分支,但实际触发了第二个elif的退出逻辑。

控制台输出

Console_
2024-01-13 18:24:10.022254
C:\Users\Lenovo\Desktop\Username\Proj\vscript\Console_>>   vfdv 
Session: 2024-01-13 18:24:10.022254 Exitting at:
2024-01-13 18:24:11.829106
PS C:\Users\Lenovo\Desktop\Username\Proj\vscript\Console_>

代码片段

print("Importing Required Libary...")
import sys
import os
import datetime
import logging
version = "1.0.0a"
session = datetime.datetime.now()
dirnow = os.getcwd()
os.system("cls")

logging.basicConfig(level=logging.INFO, filename="py_log.log",filemode="w",
                    format="%(asctime)s %(levelname)s %(message)s")

print("Console_")
print(session)

while True:
    Console = None
    Console = input(dirnow + ">>")

    def Gettime():
        nsession = datetime.datetime.now() #Get Time.
        print(nsession) #Show
        nsession = None #Clear

    if Console == "SendTest":
        Gettime()
        print("Test suscessful, return.")

    elif Console == "Exit" or "exit" or "EXIT" or "end" or "End" or "END":
        print("Session: ", session, " Exitting at:")
        Gettime()
        sys.exit()
    
    elif Console == "Return" or "return" or "RETURN" or Console == "pass" or "Pass" or "PASS":
        pass

    else:
        print("Error at:")
        Gettime()
        print("No Such Command as " + Console + ", return")
        logging.info("ERR NOCMD")

问题原因及修复

核心问题

第二个elif的判断逻辑完全错误:Console == "Exit" or "exit" or "EXIT" or "end" or "End" or "END"中,"exit"这类非空字符串在布尔判断里永远为True,不管Console是什么值,这个条件都会成立,直接触发退出逻辑。第三个elif也存在同样的问题。

修复方案

推荐用统一大小写+集合匹配的方式简化判断,同时处理输入前后的空格:

print("Importing Required Libary...")
import sys
import os
import datetime
import logging
version = "1.0.0a"
session = datetime.datetime.now()
dirnow = os.getcwd()
os.system("cls")

logging.basicConfig(level=logging.INFO, filename="py_log.log",filemode="w",
                    format="%(asctime)s %(levelname)s %(message)s")

# 把函数定义放到循环外,避免重复定义
def Gettime():
    nsession = datetime.datetime.now()
    print(nsession)

print("Console_")
print(session)

while True:
    # 去除输入前后空格,转小写统一判断
    Console = input(dirnow + ">>").strip()
    cmd = Console.lower()

    if cmd == "sendtest":
        Gettime()
        print("Test suscessful, return.")

    elif cmd in {"exit", "end"}:
        print("Session: ", session, " Exitting at:")
        Gettime()
        sys.exit()
    
    elif cmd in {"return", "pass"}:
        pass

    else:
        print("Error at:")
        Gettime()
        print(f"No Such Command as {Console}, return")
        logging.info("ERR NOCMD")

额外优化点

  • 将Gettime函数移到循环外,避免每次循环重复定义函数
  • 使用f-string替代字符串拼接,更简洁高效
  • 用strip()处理输入空格,避免用户输入带空格的命令时匹配失败

内容的提问来源于stack exchange,提问作者Inlandsteel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:05:13