Openpyxl+pytest技术问题:如何正确校验单元格是否为空?
问题分析
你当前的断言只检查了cell_values["marks"]是否为None,但实际场景里,单元格为空时返回的大概率是空字符串""而非None,这就导致了两种异常:
- 当单元格是正常值(比如5)时,断言触发报错(这是预期内的,但你的校验逻辑没命中真正的空场景)
- 当单元格确实为空时,因为返回的是空字符串不是
None,断言根本不会触发,相当于没校验到空的情况
正确的校验方式
根据数据源返回的实际空值类型,选择对应的校验逻辑:
1. 同时覆盖空字符串和None
如果单元格为空时可能返回""或None两种情况,用逻辑或覆盖:
assert cell_values["marks"] in (None, ""), ( f"The value in 'marks' is not empty for row {row_number}. " f"Actual: {repr(cell_values['marks'])}" )
用repr()能清晰显示值的类型(比如空字符串会显示为'',None显示为None),方便调试。
2. 仅校验空字符串(若数据源空值统一返回"")
如果确认所有空单元格都返回空字符串,直接断言等于"":
assert cell_values["marks"] == "", ( f"The value in 'marks' is not empty for row {row_number}. " f"Actual: {cell_values['marks']}" )
额外注意
有些数据源(比如用pandas读取的Excel)空单元格会返回nan,这种情况要加入对应的校验:
import pandas as pd assert pd.isna(cell_values["marks"]), ( f"The value in 'marks' is not empty for row {row_number}. " f"Actual: {cell_values['marks']}" )
内容的提问来源于stack exchange,提问作者paigusov
相关产品推荐
相关产品推荐

