Python 2中写入日期文件的While循环无法退出问题求助
问题分析与修复:日期输入循环无法退出的问题
嘿,我来帮你搞定这个循环停不下来的问题!核心原因其实很直白:你在判断输入是否为退出指令'0'之前,就先对输入做了字符串拼接处理,导致循环条件永远无法触发退出。
先拆解下原代码里的问题点:
原代码:
file = open(r'd:\holiday_list.txt', 'w') date = '' while(date != '0'): date = input('\nEnter Date (YYYYMMDD) : ') date = date[:4] + '-' + date[4:6] + '-' + date[5:] file.write(date) print('Job Done!') file.close()
当你输入'0'时,程序立刻执行了拼接操作:date[:4]是'0',date[4:6]和date[5:]都是空字符串,拼接后date变成了'0--'——这时候date != '0'肯定成立,循环自然停不下来。另外原代码里的日期切片还有个小bug:日部分应该取date[6:],而不是date[5:],不然输入20112016会被格式化成2011-20-016,这明显不符合日期格式。
下面是修复后的代码,我还顺便优化了文件操作的安全性:
# 用with语句自动管理文件,不用手动close,更安全 with open(r'd:\holiday_list.txt', 'w') as file: date = '' while date != '0': date = input('\nEnter Date (YYYYMMDD) : ') # 先判断是否是退出指令,是的话直接跳出循环 if date == '0': break # 对输入做格式处理,同时加个异常捕获防止格式错误 try: # 正确的切片逻辑:YYYY(0-3)、MM(4-5)、DD(6-7) formatted_date = f"{date[:4]}-{date[4:6]}-{date[6:]}" file.write(f"{formatted_date}\n") # 加换行符,每个日期单独一行 except IndexError: print("输入格式不对哦!请输入YYYYMMDD格式的日期,或者输入0退出~") print('Job Done!')
几点优化说明:
- 把退出判断放在格式化操作之前,输入'0'时直接跳出循环,彻底解决无法退出的问题
- 修复了日期切片的错误,确保输出正确的
YYYY-MM-DD格式 - 使用
with语句操作文件,自动处理文件关闭,避免忘记close或者异常导致文件未关闭的问题 - 增加了
try-except捕获输入长度不足的异常,给用户友好的提示
内容的提问来源于stack exchange,提问作者user3529864
相关产品推荐
相关产品推荐

