Python while True循环中日期选择函数返回变量值异常怎么修复
问题修复方案
核心原因
你的函数本身可以正确计算并返回最新的start_date和end_date,出现旧值不更新的问题核心是调用函数时没有接收返回值:
- 函数内部定义的
start_date、end_date都是局部变量,函数运行结束后就会自动销毁,不会自动覆盖你外部定义的同名变量 - 你必须主动把函数return的两个值赋值给外部变量,才能拿到最新的选择结果
其他代码冗余/隐患修复
你的代码还有几个可优化的问题:
return语句已经会直接终止函数运行,后面跟的break完全不会执行,可以直接删掉- 选择3直接退出的分支里,你没有给
start_date、end_date赋值,跳出循环后打印这两个变量会直接报「变量未定义」错误,同时函数无返回值,接收的时候会拿到None - 输入非数字的时候,
int(input())会直接报错,建议加异常捕获
修正后代码
import pandas as pd # 假设ManagerAll是你提前定义好的全局变量,这里保留你的原有逻辑 def dateChoices(): while True: print("Menu") print("1.All Dates") print("2.Selected Dates") print("3.Exit") # 加异常捕获避免输入非数字报错 try: choice=int(input("Enter your choice:")) except ValueError: print("请输入有效数字") continue if choice==1: start_date = ManagerAll['Min_Date'][0] end_date = ManagerAll['Max_Date'][0] print("All dates chosen: " + str(start_date)) return start_date, end_date elif choice==2: start_date = input('enter a start date (format is YYYY-MM-DD):') start_date = pd.to_datetime(start_date, format='%Y-%m-%d') end_date = input('enter an end date (format is YYYY-MM-DD):') end_date = pd.to_datetime(end_date, format='%Y-%m-%d') print('start date chosen is: ' + str(start_date)) print('end date chosen is: ' + str(end_date)) return start_date, end_date elif choice==3: print("退出选择") # 可以根据你的需求返回默认值或者None return None, None else: print("Wrong Choice")
正确调用方式
你之前应该是直接调用dateChoices()没有赋值,改成下面的写法就能拿到最新值:
# 把函数返回的两个值赋值给外部变量 start_date, end_date = dateChoices() # 后续就可以直接使用最新的start_date和end_date了
内容的提问来源于stack exchange,提问作者Herman L
相关产品推荐
相关产品推荐

