170 похожих чатов

@Tishka17 , решил применить твою датакласс-фактори. Но уперся в кейс,

который пока не понял как разрулить. А именноЖ
Читаю запись из бд, в ней некоторые поля NULL, перевожу в питоновский дикт - эти поля соответсвенно = None, делаю factory.load(.....). Понятно что она падает с VakueError на None значениях.
Не очень логично имхо. Конкретно в parse, где проверка типа идет. Разве не логичнее было бы рассматривать None как Any тип, который можно присваивать в поле любого типа?
И как обойти эту историю.
объявить поля Optional[тип] не могу, т.к. 1 - дата классы сгенерированы и будут перегенирироваться, 2 - их очень много, полей тоже много, пальцы сотрешь добавлять)
Может не увидел в доках опцию отключения проверки ? препарсинг функция тоже не прокатывает естественно

19 ответов

25 просмотров

Если поле типа int или str, оно не может быть None по всем стандартам.

Andrei-Kisel Автор вопроса
Tishka17
Если поле типа int или str, оно не может быть None...

по каким всем стандартам? Ну вот у нас в системе так. Досталось в наследство. grpc message , MySQL допускают такие значения.

Если прям очень надо, можешь сделать схему для int/str, в которой парсер будет разрешать None.

Andrei-Kisel Автор вопроса
Tishka17
Если прям очень надо, можешь сделать схему для int...

если это пре-парсер, то не могу. Тип приходящих данных не определить

Andrei Kisel
по каким всем стандартам? Ну вот у нас в системе т...

Ну смотри. Если поле типа str, значит у него есть методы типа lower(), strip() и т.п. А теперь ты туда пихнул None. Что будет?

Andrei-Kisel Автор вопроса
Tishka17
Ну смотри. Если поле типа str, значит у него есть ...

возможно. Но в жизни реальные данные имеют такие значения)

Andrei Kisel
возможно. Но в жизни реальные данные имеют такие з...

Если у тебя аннотация не соответствует реальности, это проблема аннотации

Andrei-Kisel Автор вопроса
Tishka17
Ну смотри. Если поле типа str, значит у него есть ...

парсер тоже можно переопределить? Пропустил что ли в доках...

Andrei-Kisel Автор вопроса
Tishka17
Если у тебя аннотация не соответствует реальности,...

Это проблема автоматического генерации датаклассов из grpc прото файлов. )

Andrei-Kisel Автор вопроса
Tishka17
Ну вероятно там и надо чинить :)

это не мое и починить там невозможно) править все поля str , int на Optional -тоже так себе идея, среди них есть обязательные

Andrei Kisel
Это проблема автоматического генерации датаклассов...

Я бы предложил сделать кастомный парсер, который None меняет на разумный дефолт типа 0 или ""

Andrei Kisel
это не мое и починить там невозможно) править все...

Обязательность не имеет отношения к None.

Andrei Kisel
это не мое и починить там невозможно) править все...

В датаклассе в принципе все поля обязательные. Опшнал - это про допустимые значение

Andrei-Kisel Автор вопроса
Tishka17
В датаклассе в принципе все поля обязательные. Опш...

не придирайся к словам. Ты прекрасно понял о чем я

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта