Питон не питонирует
2025-05-31 14:03![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Решил подписаться на линуксный журнал, а у них ошибка выскакивает. Питон не тот язык, на котором следует писать надёжные системы. Заметьте: production код выполняется из каталога /home/odoo/src.
RPC_ERROR
Odoo Server Error
Traceback (most recent call last):
File "/home/odoo/src/odoo/17.0/odoo/http.py", line 1803, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "/home/odoo/src/odoo/17.0/odoo/service/model.py", line 152, in retrying
result = func()
File "/home/odoo/src/odoo/17.0/odoo/http.py", line 1831, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "/home/odoo/src/odoo/17.0/odoo/http.py", line 2035, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "/home/odoo/src/odoo/17.0/addons/website/models/ir_http.py", line 235, in _dispatch
response = super()._dispatch(endpoint)
File "/home/odoo/src/odoo/17.0/odoo/addons/base/models/ir_http.py", line 221, in _dispatch
result = endpoint(**request.params)
File "/home/odoo/src/odoo/17.0/odoo/http.py", line 772, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/home/odoo/src/enterprise/17.0/website_sale_account_taxcloud/controllers/main.py", line 48, in shop_payment_transaction
return super().shop_payment_transaction(order_id, access_token, **kwargs)
File "/home/odoo/src/odoo/17.0/odoo/http.py", line 772, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/home/odoo/src/odoo/17.0/addons/website_sale/controllers/main.py", line 2089, in shop_payment_transaction
return tx_sudo._get_processing_values()
File "/home/odoo/src/odoo/17.0/addons/payment/models/payment_transaction.py", line 466, in _get_processing_values
processing_values.update(self._get_specific_processing_values(processing_values))
File "/home/odoo/src/custom/trial/saas_payment_stripe/models/payment_transaction.py", line 24, in _get_specific_processing_values
res = super()._get_specific_processing_values(processing_values)
File "/home/odoo/src/odoo/17.0/addons/payment_stripe/models/payment_transaction.py", line 36, in _get_specific_processing_values
intent = self._stripe_create_intent()
File "/home/odoo/src/odoo/17.0/addons/payment_stripe/models/payment_transaction.py", line 90, in _stripe_create_intent
payload=self._stripe_prepare_payment_intent_payload(),
File "/home/odoo/src/custom/trial/saas_payment_stripe/models/payment_transaction.py", line 73, in _stripe_prepare_payment_intent_payload
**super()._stripe_prepare_payment_intent_payload(**kwargs),
File "/home/odoo/src/odoo/17.0/addons/payment_stripe/models/payment_transaction.py", line 176, in _stripe_prepare_payment_intent_payload
payment_intent_payload.update(**self._stripe_prepare_mandate_options())
File "/home/odoo/src/odoo/17.0/addons/payment_stripe/models/payment_transaction.py", line 206, in _stripe_prepare_mandate_options
mandate_values = self._get_mandate_values()
File "/home/odoo/src/enterprise/17.0/sale_subscription/models/payment_transaction.py", line 53, in _get_mandate_values
start_datetime = max(
TypeError: '>' not supported between instances of 'datetime.datetime' and 'bool'
The above server error caused the following client error:
RPC_ERROR: Odoo Server Error
RPC_ERROR
at makeErrorFromResponse (https://shop.linuxnewmedia.com/web/assets/4/8f9a553/web.assets_frontend_lazy.min.js:4739:163)
at XMLHttpRequest.<anonymous> (https://shop.linuxnewmedia.com/web/assets/4/8f9a553/web.assets_frontend_lazy.min.js:4743:13)
no subject
Date: 2025-05-31 21:47 (UTC)no subject
Date: 2025-05-31 23:24 (UTC)no subject
Date: 2025-05-31 23:02 (UTC)Аналогично, запустил я как-то написанный на си/цпп/паскале программу, а она упала с какой то ошибкой, представляете! Во уродские языки, нельзя на них надёжные программы писать!
no subject
Date: 2025-05-31 23:30 (UTC)Конечно, где-то кто-то способен хорошо писать и на Питоне. Но язык не способствует качеству кода.
no subject
Date: 2025-06-01 00:18 (UTC)no subject
Date: 2025-06-01 03:50 (UTC)no subject
Date: 2025-06-01 00:25 (UTC)#include <time.h>
bool miscompare(time_t a, bool b) { return a > b; }
компилируется.
no subject
Date: 2025-06-01 01:36 (UTC)no subject
Date: 2025-06-01 01:58 (UTC)Ещё как попадает. Вы всегда проверяете, сколько объектов из запрошенного количества записала функция fwrite()?
no subject
Date: 2025-06-01 06:03 (UTC)no subject
Date: 2025-06-01 18:51 (UTC)А другие не всегда. Мне попадалось много C/C++ кода, авторы которого проверкой кодов возврата не заморачивались. С аргументацией типа "а что я могу по этому поводу сделать?" или "тесты проходят, значит всё нормально".
no subject
Date: 2025-06-06 19:59 (UTC)no subject
Date: 2025-06-07 21:08 (UTC)Начнём с массива...
Ну и попробуем на отрицательных символах.
no subject
Date: 2025-06-01 07:17 (UTC)Заметим также, что веб-сайты почему-то на си/цпп не пишут, а ведь такой безопасный, по-вашему, язык. Я сервер на цпп видел, курьёз.
no subject
Date: 2025-06-01 07:43 (UTC)no subject
Date: 2025-06-07 21:09 (UTC)no subject
Date: 2025-06-07 21:53 (UTC)https://rocket.rs
https://github.com/ferronweb/ferron
https://medium.com/@aleksej.gudkov/rust-web-server-example-a-step-by-step-guide-ba3c3723a176
no subject
Date: 2025-06-01 00:16 (UTC)Вы жалуетесь на то, что питон не умеет сравнивать datetime и bool? Так это нормально, единицы измерения разные. В строго типизированном языке была бы та же проблема, только раньше, при присваивании.
no subject
Date: 2025-06-01 01:31 (UTC)no subject
Date: 2025-06-01 01:44 (UTC)Этот код обычно работает, значит ошибка появляется только при каких-то данных, а на момент компиляции данные ещё неизвестны.
no subject
Date: 2025-06-01 01:37 (UTC)no subject
Date: 2025-06-01 01:49 (UTC)Программисты небось пытались сравнить две даты, но вместо одной из них получили ошибку вроде логического значения False. Такой вариант развития событий программисты не ожидали и обработку ошибок не написали. Может в любом языке случиться.
no subject
Date: 2025-06-01 03:53 (UTC)Если к nullability подойдено со всей строгостью, то нет. В C# структуры отдельны от объектов, передаются по значению и не могут быть nullable.
Правильным способом вернуть вместо результата сообщение "не могу получить результат" является выброс исключения.
no subject
Date: 2025-06-01 18:41 (UTC)А потом, после выброса исключения? Программисты, которые не проверяют код возврата точно так же не будут ловить исключения.
no subject
Date: 2025-06-01 23:42 (UTC)В Java этому служит механизм checked exceptions.
no subject
Date: 2025-06-02 02:35 (UTC)Намерение программистов зачастую заключается в том, чтоб программа скомилировалась. Простейший способ этого достигнуть — поймать checked exception и сразу бросить unchecked exception, пасом в одно касание.
no subject
Date: 2025-06-06 19:59 (UTC)no subject
Date: 2025-06-07 21:03 (UTC)no subject
Date: 2025-06-07 21:04 (UTC)no subject
Date: 2025-06-08 04:14 (UTC)Код возврата, ловля исключений или монады — не так важно. Важно что программист предусмотрел возможность нештатного поведения и определил, что в этом случае делать. Если не предусмотрел и не определил, то при любом раскладе остаётся только прекращать выполнение программы, бросив всё как есть.
no subject
Date: 2025-06-08 06:00 (UTC)no subject
Date: 2025-06-07 21:05 (UTC)no subject
Date: 2025-06-01 03:55 (UTC)С соответствующими результатами.
no subject
Date: 2025-06-01 06:09 (UTC)no subject
Date: 2025-06-01 08:55 (UTC)no subject
Date: 2025-06-01 07:25 (UTC)В терминах си, дллка плагина от старой версии бинарного интерфейса. Там бы просто не заметили ошибки, ну байты и байты, почему-то правда поведение странное.
В теории да, есть ком, касты зло. На практике джунский код на си в среднем тоже параша.
no subject
Date: 2025-06-01 17:28 (UTC)no subject
Date: 2025-06-02 09:05 (UTC)no subject
Date: 2025-06-07 21:02 (UTC)