解决将excel中的数据转换为列表字典的形式 TypeError: ExcelUtil() takes no arguments 自动化测试 数据驱动 ddt data模块

文章目录

1 问题

在这里插入图片描述

TypeError: ExcelUtil() takes no arguments
自己写的方法ExcelUtil(),没有参数传入。

2 原因

低级错误
def __int__(self)应该改为def __init__(self)def __init__(self)为构造方法不可随意改变。少打了一个i

3 总结

一直以为是路径问题,因为def __init__(self,excelPath,sheetName = "Sheet1"):,excelPath参数是excel文件的目录。把自己的报错复制到百度,看了人家的经验,才发现少打了一个字母i
最后,excel中的数据转换为列表字典的形的方法,如下代码:

import xlrd
class ExcelUtil():
    # __init__ 构造方法
    def __init__(self,excelPath,sheetName = "Sheet1"):
       
<think>根据用户的问题,他遇到了一个错误:`TypeError: Triangle() takes no arguments`,这通常发生在实例化类时传递了参数,但类没有正确初始化。参考引用[1]中提到的错误,这很可能是由于将`__init__`方法错误地命名(例如写成`__int__`)导致的。 因此,解决这个问题的关键是检查类中是否正确定义了`__init__`方法,并确保其拼写正确(两个下划线开头,然后是init,再两个下划线结尾)。 另外,引用[2]和引用[3]提到参数传递的问题,但当前错误更可能是由于缺少`__init__`方法定义导致的。因为当类没有定义`__init__`方法或者定义了但方法名错误时,Python会认为这个类不接受任何参数(除了self),所以当传递参数时就会报错。 **解决步骤:** 1. 检查类中是否定义了`__init__`方法。 2. 确保`__init__`的拼写正确(注意是`__init__`,不是`__int__`,也不是`_init_`等)。 3. 确保`__init__`方法的第一个参数是`self`,并且后续参数与实例化时传递的参数匹配(数量和顺序)。 **示例:** 假设用户有一个`Triangle`类,他可能这样定义: ```python class Triangle: # 错误的写法:__int__ 或者没有定义__init__ def __int__(self, side1, side2, side3): self.side1 = side1 self.side2 = side2 self.side3 = side3 ``` 正确的写法应该是: ```python class Triangle: def __init__(self, side1, side2, side3): self.side1 = side1 self.side2 = side2 self.side3 = side3 ``` 这样,当创建实例时传递三个参数就不会报错了: ```python t = Triangle(3, 4, 5) ``` 如果用户没有定义`__init__`方法,那么他需要添加;如果方法名写错了,就改正过来。 **注意:** 如果用户确实没有定义`__init__`方法,那么他就不应该传递参数,因为默认的构造函数不接受参数。但根据错误信息,他传递了参数,所以必须定义`__init__`来接收这些参数。 **总结:** `TypeError: Triangle() takes no arguments` 错误的解决方法是检查并正确定义 `__init__` 方法。 ### §§相关问题§§ 1. Python 类中 `__init__` 方法和 `__new__` 方法有什么区别? 2. 如何在 Python 类中使用可变参数(`*args` 和 `**kwargs`)? 3. 在 Python 中如何实现类的继承并正确调用父类的初始化方法?</think>### 解决 Python TypeError: Triangle() takes no arguments 错误 这个错误通常发生在类实例化时传递了参数,但类没有正确定义 `__init__` 初始化方法。根据引用[1]的案例,根本原因是拼写错误:将 `__init__` 写成了 `__int__` 或其他错误形式。 #### 错误原因分析: 1. **缺少 `__init__` 方法**:类没有定义初始化方法 2. **`__init__` 拼写错误**:如写成 `__int__`, `_init_` 等 3. **参数不匹配**:引用[2]指出,传递的参数数量与方法定义不匹配 4. **位置参数错误**:引用[3]说明位置参数必须在关键字参数前 #### 解决方案: 以 Triangle 类为例,正确实现方式: ```python class Triangle: # 正确拼写 __init__ 方法 def __init__(self, a, b, c): # 注意是 init 不是 int self.side_a = a self.side_b = b self.side_c = c def perimeter(self): return self.side_a + self.side_b + self.side_c # 正确实例化(传递3个位置参数) t = Triangle(3, 4, 5) # 参数数量必须匹配 print(t.perimeter()) # 输出:12 ``` #### 常见错误排查表: | 错误类型 | 错误示例 | 修复方案 | |---------|---------|---------| | 方法名拼写错误 | `def __int__(self):` | 改为 `__init__` | | 缺少初始化方法 | 无 `__init__` 定义 | 添加 `__init__` 方法 | | 参数数量不匹配 | `t = Triangle()` | 传递正确数量的参数 | | 位置参数错误 | `t = Triangle(c=5, 3, 4)` | 位置参数在前:`(3,4,c=5)` | #### 关键检查点: 1. 确保方法名是 **`__init__`**(注意前后双下划线) 2. 第一个参数必须是 **`self`** 3. 实例化时传递的参数数量必须与 `__init__` 定义匹配 4. 位置参数必须在关键字参数前 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值