При создании экземпляра класса с аргументами input() в числе выдает ошибку или вовсе не принимает, почему?
При попытке создания экземпляра класса таким образом, чтобы аргументы объекта можно было ввести, столкнулся с ошибкой только там, где числа. При использовании просто input() он пропускает в записываемом фале этот параметр, а при попытке преобразовать как на примере выдает ошибку ValueError: invalid literal for int() with base 10: ''.
Кто подскажет ученику, что не так?
from string import ascii_letters
class Person:
S_RUS = 'абвгдеёжзийклмнопрстуфхцчшщьыъэюя-'
S_RUS_UPPER = S_RUS.upper()
def __init__(self, fio, old, ps, weight):
self.verify_fio(fio)
self.__fio = fio.split()
self.__old = old
self.__passport = ps
self.__weight = weight
@classmethod
def verify_fio(cls, fio):
if type(fio) != str:
raise TypeError('ФИО длжно быть строкой')
f = fio.split()
if len(f) != 3:
raise TypeError('Неверный формат ФИО')
letters = ascii_letters + cls.S_RUS + cls.S_RUS_UPPER
for s in f:
if len(s) < 2:
raise TypeError('В ФИО длжен быть хотябы один символ')
if len(s.strip(letters)) != 0:
raise TypeError('В ФИО должны быть только буквы')
@classmethod
def verify_old(cls, old):
if type(old) != int or old < 14 or old > 120:
raise TypeError("Возраст должен быть целым числом от 14 до 120")
@classmethod
def verify_weight(cls, w):
if type(w) != float or w < 20:
raise TypeError("Вес должен быть вещественным числом от 20 и выше")
@classmethod
def verify_ps(cls, ps):
if type(ps) != int:
raise TypeError("Паспорт должен быть строкой")
s = ps.split()
if len(s) != 2 or len(s[0]) != 4 or len(s[1]) != 6:
raise TypeError('Неверный формат паспорта')
for p in s:
if not p.isdigit():
raise TypeError("Серия и номер паспорта должны быть числами")
@property
def fio(self):
return self.__fio
@fio.setter
def fio(self, old):
self.verify_old(old)
self.__old = old
@property
def old(self):
return self.__old
@old.setter
def old(self, old):
self.verify_old(old)
self.__old = old
@property
def weight(self):
return self.__weight
@weight.setter
def weight(self, weight):
self.verify_weight(weight)
self.__weight = weight
@property
def passport(self):
return self.__passport
@passport.setter
def passport(self, passport):
self.verify_ps(ps)
self.__passport = passport
s = Person('Иванов Иван Иванович', 36, '1223 456743', 90)
g = Person(input(), int(input()), input(), float(input()))
with open('home.txt', 'w+') as r:
for item in s.fio:
r.seek(0)
if item not in r.read():
r.write(" ".join(s.fio) + " " + str(s.old) + ' лет' + " " + 'Паспорт: ' + s.passport + " " + 'Вес: ' + str(s.weight) + '\n')
r.write(" ".join(g.fio) + " " + str(g.old) + ' лет' + " " + 'Паспорт: ' + g.passport + " " + 'Вес: ' + str(g.weight))