Ошибка: TypeError: '>' not supported between instances of 'NoneType' and 'int'

Есть код для работы с Excel:

wb = openpyxl.load_workbook('D:\lab_report.xlsx')
sht = wb.active
sht.unmerge_cells('C31:D31')
rep = sht['C31'].value
for i in range(45,500):
    if sht['AX'+ str(i)].value > 0:
        sht['AY' + str(i)] = rep
    else:
        break
wb.save('D:\lab_report.xlsx')

При выполнении выдает ошибку:

TypeError: '>' not supported between instances of 'NoneType' and 'int'

Столбец в условии содержит строго числа.

Не могу разобраться.


Ответы (1 шт):

Автор решения: MaxU

В ячейках Excel файла могут быть пустые значения, представленные как None в OpenPyxl.

Как и сказано в ошибке, None нельзя сравнивать с объектами титпа int.  Воспроизведение ошибки:

if None > 0:
    print("oops!")
---------------------------------------------------------------------------
...
TypeError: '>' not supported between instances of 'NoneType' and 'int'

Поэтому сначала нужно сделать проверку не является ли объект None:

if sht['AX{i}'+ str(i)].value is not None and sht['AX'+ str(i)].value > 0:

а еще лучше / понятнее сделать так (для Python 3.8+):

for i in range(45,500):
    if (val := sht[f'AX{i}'].value) is None or val <= 0: 
        break
    sht[f'AX{i}'] = rep
→ Ссылка