Python单元测试报AttributeError: 'NoneType'无'dropna'属性怎么解决
错误原因
报错核心原因是单元测试代码中未给NumericColumn实例的serie属性赋值,该属性默认值为None,调用dropna方法时触发空对象属性错误。你其他功能运行正常是因为业务场景下使用该类时,会正确传入pd.Series类型的serie值,仅单元测试代码存在疏漏。
解决方案
方案1:补全单元测试用例的初始化逻辑(推荐)
按照你断言的返回值要求(唯一值数为7、缺失值数为1),构造对应的pd.Series赋值给dc1.serie即可,修改后的test_numeric.py代码如下:
import unittest from src.numeric import NumericColumn import pandas as pd class TestNumeric(unittest.TestCase): def test_numeric(self): ### test on dummy data ### # 构造符合预期的测试序列:非空唯一值7个,缺失值1个 test_serie = pd.Series([1,2,2,3,4,5,6,7, None]) dc1 = NumericColumn() dc1.col_name = "my_test" dc1.serie = test_serie # 新增serie赋值代码 # test methods self.assertEqual(dc1.get_name(),"my_test") self.assertEqual(dc1.get_unique(),7) self.assertEqual(dc1.get_missing(),1)
方案2:给业务代码增加空值容错(可选)
如果要避免后续其他场景传入空serie时直接报错,可以给NumericColumn的方法增加空值判断,修改numeric.py对应方法:
def get_unique(self): """ Return number of unique values for selected column """ if self.serie is None: return 0 # 也可以根据业务需求抛自定义错误 return self.serie.dropna().unique.size def get_missing(self): """ Return number of missing values for selected column """ if self.serie is None: return 0 return self.serie.isna().sum()
内容的提问来源于stack exchange,提问作者simple114141
相关产品推荐
相关产品推荐

