xlrd模块使用报错解决“TypeError: 'instancemethod' object has no attribute '__getitem__'”

问题描述

1、报错信息:
File “E:/myPythonProject/testCase_py/common/getCase.py”, line 12, in get_case
table = datas.sheet_by_name[sheetName]
TypeError: ‘instancemethod’ object has no attribute ‘getitem
2、代码:

import xlrd

#通过传入用例名称的文件和工作表来读取测试用例
def get_case(filename,sheetName):
    case_dir = 'E:/myPythonProject/testCase_excel'+'/'+filename+'.xlsx'
    datas = xlrd.open_workbook(case_dir)
    table = datas.sheet_by_name[sheetName]
    nor = table.nrows
    nol = table.ncols
    return nor,table
解决

将12行:table = datas.sheet_by_name[sheetName]
改为:table = datas.sheet_by_name(sheetName)

原因

通过名称获取工作表,sheet_by_name()方法应该使用()而不是[]

总结

1、此报错一般都是括号使用不对,不同括号的含义不同:
()是函数引入参数
{}是字典
[]是列表key

### 解决 VSCode 中 `AttributeError: module 'xxx' has no attribute` 错误 当遇到此类错误时,通常意味着尝试访问的模块中不存在指定的属性或方法。这可能是由于多种因素引起的,包括但不限于版本不匹配、环境配置不当或是IDE缓存问题。 #### 检查版本兼容性 确认使用版本是否支持所调用的方法或属性非常重要。不同版本间的API变更可能导致某些功能不再可用。建议查阅官方文档获取最新版次的信息并适当调整项目依赖项[^5]。 #### 验证虚拟环境中已正确安装所需 确保工作区内的解释器指向正确的虚拟环境,并且该环境下确实已经成功安装了所需的第三方。可以通过命令行执行如下操作来验证: ```bash pip show xxx # 替换为具体的名查看其详情 ``` 如果未找到相应记录,则需重新安装缺失的部分;反之则考虑卸载再重试以修复潜在损坏。 #### 清除 IDE 缓存与重启服务 有时开发工具内部保存的状态数据会干扰正常解析过程,造成误导性的编译期警告甚至运行时报错。对于VS Code而言,可以尝试清理扩展市场中的插件缓存以及本地存储的工作空间设置文件夹(.vscode),之后关闭所有实例后再启动程序测试效果变化情况。 #### 更新至最新稳定发行版 鉴于部分旧版本可能存在Bug或者已被废弃不用的情况,适时跟进社区发布的更新有助于规避不必要的麻烦。特别是针对那些频繁迭代维护活跃度高的开源软件来说更是如此。 #### 示例代码片段展示排查流程 下面给出一段简单的Python脚本用于模拟上述几个方面的检测逻辑: ```python import importlib.util from packaging.version import parse as parse_version def check_module_attribute(module_name, attr_name): spec = importlib.util.find_spec(module_name) if not spec: print(f"Module '{module_name}' is not installed.") return False try: mod = __import__(module_name) if hasattr(mod, attr_name): current_ver = getattr(mod, '__version__', '<unknown>') print( f"'{attr_name}' exists in {module_name} (current version={current_ver})." ) return True else: print( f"{module_name} does NOT have the expected attribute '{attr_name}'. " "Please verify your usage or consider updating/downgrading." ) return False except ImportError as e: print(e) if __name__ == "__main__": result = check_module_attribute('xlrd', 'open_workbook') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值