Выдает ошибку : TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

Дан файл, содержащий различные даты. Каждая дата — это число месяц и год. Найти год с наименьшим номером.

import csv

d =[]
with open(r'C:\\Users\\79654\\Desktop\\История\\2laba8.txt','r+',encoding='cp1251') as f:
    reader = csv.DictReader(f, delimiter = ",")
    for row in reader:
        d.append(row)
        min_year = int(row.get("год"))
for i in d:
    if min_year >= int(i.get("год")):
        min_year = int(i.get("год"))
print(f"Наименьший год {min_year}")
print("Весна")
for i in d:
    if (int(i.get("месяц")) > 2) and (int(i.get("месяц")) < 6):
        print(i)
Traceback (most recent call last):
  File "D:\pythonProject1\test.py", line 8, in <module>
    min_year = int(row.get("год"))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

Файл:

день,месяц,год
12,12,2020
11,04,2019
15,05,1998
20,07,2016
10,01,1988
20,01,2001
01,01,1967
01,05,1999

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

Автор решения: Master's Time

Ошибка в том что cp1251 не читает числа как 2230, 4023, и так далее. Поэтому лучше использовать utf-8. Когда cp1251 не принимает числа то он просто отправляет None так как он не видит такие числа

import csv

d =[]
with open(r'text.txt','r+',encoding='utf-8') as f:
    reader = csv.DictReader(f, delimiter = ",")
    for row in reader:
        d.append(row)
        min_year = int(row.get("год"))
        
for i in d:
    if min_year >= int(i.get("год")):
        min_year = int(i.get("год"))
print(f"Наименьший год {min_year}")
print("Весна")
for i in d:
    if (int(i.get("месяц")) > 2) and (int(i.get("месяц")) < 6):
        print(i)
→ Ссылка
Автор решения: CrazyElf

Возьмите библиотеку Pandas и не мучайтесь (из файла читать csv будет ещё проще, чем из переменной - просто укажите имя файла в read_csv). Pandas сама соображает, что первая строка - это заголовок (если заголовок имеет другой формат, это легко настраивается):

import pandas as pd
from io import StringIO

csv = """ \
день,месяц,год
12,12,2020
11,04,2019
15,05,1998
20,07,2016
10,01,1988
20,01,2001
01,01,1967
01,05,1999"""

df = pd.read_csv(StringIO(csv))
print('Весна')
print(df[(df['месяц'] > 2) & (df['месяц'] < 6)])

Вывод:

Весна
    день  месяц   год
1     11      4  2019
2     15      5  1998
7      1      5  1999
→ Ссылка