Python分支判断异常:输入Canada仍返回全量SQL数据问题
问题分析与解决方案
核心问题:条件判断逻辑错误
你代码里的条件判断写法不符合Python语法逻辑:
if first_choice == "All" or "all":
这行代码等价于 (first_choice == "All") or "all",而Python中非空字符串会被判定为True,所以不管用户输入什么,这个条件永远成立,自然只会返回全量数据。调换顺序后,Canada的条件也存在同样问题,导致所有输入都走对应分支。
修正后的代码
我们可以统一处理输入的大小写,同时简化判断逻辑,还能减少重复代码:
def get_employees(mycursor): while True: try: print("\n-----------Employees Per Country-------------") first_choice = input("Enter country name for specific country or (All) to view all countries:").strip().lower() # 执行对应的SQL查询 if first_choice == "all": sql_query = "SELECT * FROM EmployeesPerCountry;" elif first_choice == "canada": sql_query = "SELECT * FROM EmployeesPerCountry WHERE country_name = 'Canada';" else: print("Invalid input. Please enter 'All' or 'Canada'.") continue # 执行查询并打印结果 mycursor.execute(sql_query) query_result = mycursor.fetchall() for record in query_result: print(f"Country Name: {record[0]} \nNumber of Employees: {record[1]}\n") return except Exception as err: print(f"An error has occurred: {err}\n") continue
关键优化点
- 统一输入格式:用
.strip().lower()去除输入首尾空格并转为小写,这样用户输入ALL、all、All都能被正确识别 - 正确的条件判断:直接和小写后的目标值比较,逻辑清晰且避免语法错误
- 代码复用:把执行查询和打印结果的逻辑提取出来,避免重复代码
- 增加输入校验:处理其他无效输入的情况,提升用户体验
内容的提问来源于stack exchange,提问作者Beg_Cod34
相关产品推荐
相关产品推荐

