Python函数输入逻辑调整:解决未定义变量c、d的问题
问题解决思路及修正代码
错误原因分析
- 你写的
search函数默认参数用了c和d,但这俩变量在函数定义时还没创建,Python会直接报未定义错误。 start函数里没真正获取用户输入,只是把提示语当默认参数,而且用户输入的是字符串,直接和整数1比较永远不匹配。search函数里的c、d是局部变量,和默认参数里的名字重复,逻辑完全混乱。
修正后的代码
import xlrd # 先加载Excel文件,加r避免路径转义字符问题 esme_file = r'D:\python\project1\data1.xlsx' wb = xlrd.open_workbook(esme_file) sh = wb.sheet_by_index(0) def start(): # 获取用户指令,处理输入非数字的异常情况 try: user_choice = int(input("if you want to search type 1: ")) if user_choice == 1: search() else: print("please type 1") except ValueError: print("please type a valid number") def search(): # 直接在函数内获取搜索关键词和列索引,无需默认参数 c = str(input('word: ')) try: d = int(input('column: ')) - 1 # 检查列索引是否在合法范围内 if d < 0 or d >= sh.ncols: print(f"column index out of range, valid columns are 1 to {sh.ncols}") return ourlist = [] for i in range(sh.nrows): ourlist.append(sh.cell_value(i, d)) print(f"Found {ourlist.count(c)} matches") except ValueError: print("please type a valid number for column") # 启动程序 start()
关键改动说明
- 移除
search函数的默认参数,直接在函数内部获取用户输入,彻底解决变量未定义问题。 start函数内部真正获取用户输入并转成整数,增加异常处理防止输入非数字内容崩溃。- 给文件路径加
r前缀,避免反斜杠被识别为转义字符。 - 新增列索引合法性检查,避免用户输入超出Excel实际列数的数值。
- 优化输出提示,让结果更直观清晰。
内容的提问来源于stack exchange,提问作者Farhan
相关产品推荐
相关产品推荐

