调用tmodule模块stock函数时出现KeyError: ''异常问题咨询
问题根因排查
- 核心错误来源是函数定义和调用的参数不匹配:你定义的
stock函数第一个参数为self,说明该函数本为类成员方法,你直接将其作为普通模块函数调用时,传入的"ABAD1"被赋值给了第一个参数self,stockname参数没有接收到传入值,使用了默认的空字符串"",因此触发stocknames[""]的KeyError报错。
解决方案
方案1:修改为普通模块函数(无需归属类的场景)
删除函数定义的第一个self参数即可,修正后的函数定义如下:
import pandas as pd import csv import requests def stock(stockname="", value=100): stocknames = { "ABAD1": "59612098290740355", "ABDI1": "49054891736433700", } urlid = stocknames[stockname] url = 'http://.............................&i=' + urlid content = requests.get(url) with open('out.csv', 'w') as f: writer = csv.writer(f) for line in content.iter_lines(): writer.writerow(line.decode('utf-8').split(',')) df = pd.read_csv('out.csv') return (....)
改完后你原有的调用语句tm.stock("ABAD1")即可正常运行。
方案2:按类成员方法规则调用(本就属于类的场景)
如果stock本身就是你定义的类的成员方法,需要先实例化类,再通过实例调用方法:
import tmodule as tm # 将下方StockUtil替换为你代码中实际的类名 stock_ins = tm.StockUtil() st = stock_ins.stock("ABAD1")
优化建议
你可以在取字典值前增加参数合法性校验,避免抛出模糊的KeyError,方便快速定位问题:
if stockname not in stocknames: raise ValueError(f"非法的股票代码:{stockname},支持的代码列表为{list(stocknames.keys())}") urlid = stocknames[stockname]
内容的提问来源于stack exchange,提问作者milad
相关产品推荐
相关产品推荐

