vak: (Daemon)
[personal profile] vak
Решил подписаться на линуксный журнал, а у них ошибка выскакивает. Питон не тот язык, на котором следует писать надёжные системы. Заметьте: 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)

Date: 2025-05-31 21:47 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Mojo должен замоджировать рано или поздно.

Date: 2025-05-31 23:02 (UTC)
straktor: benders (Default)
From: [personal profile] straktor
Раз у одних так сделано, вы сделали вывод, что никто другой по-другому не может сделать?

Аналогично, запустил я как-то написанный на си/цпп/паскале программу, а она упала с какой то ошибкой, представляете! Во уродские языки, нельзя на них надёжные программы писать!

Date: 2025-06-01 00:16 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Вы жалуетесь на то, что питон не умеет сравнивать datetime и bool? Так это нормально, единицы измерения разные. В строго типизированном языке была бы та же проблема, только раньше, при присваивании.

Date: 2025-06-01 00:18 (UTC)
From: [personal profile] nz

Duck typing

Date: 2025-06-01 00:25 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

#include <time.h>

bool miscompare(time_t a, bool b) { return a > b; }

компилируется.

Edited (форматирование) Date: 2025-06-01 00:29 (UTC)

Date: 2025-06-01 01:31 (UTC)
From: [personal profile] dedekha
Строго типированный язык нашел бы эту проблему при компиляции или я чего-то недопонимаю?

Date: 2025-06-01 01:44 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Этот код обычно работает, значит ошибка появляется только при каких-то данных, а на момент компиляции данные ещё неизвестны.

Date: 2025-06-01 01:49 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Программисты небось пытались сравнить две даты, но вместо одной из них получили ошибку вроде логического значения False. Такой вариант развития событий программисты не ожидали и обработку ошибок не написали. Может в любом языке случиться.

Date: 2025-06-01 01:58 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Ещё как попадает. Вы всегда проверяете, сколько объектов из запрошенного количества записала функция fwrite()?

Date: 2025-06-01 03:50 (UTC)
lxe: (Default)
From: [personal profile] lxe
Именно.

Date: 2025-06-01 03:53 (UTC)
lxe: (Default)
From: [personal profile] lxe
Может в статически типизированных языках, где объект фактически представляется как ссылка на объект. NullPointerException.
Если к nullability подойдено со всей строгостью, то нет. В C# структуры отдельны от объектов, передаются по значению и не могут быть nullable.
Правильным способом вернуть вместо результата сообщение "не могу получить результат" является выброс исключения.

Date: 2025-06-01 03:55 (UTC)
lxe: (Default)
From: [personal profile] lxe
Питон — это "ленинский призыв" в программирование. Как ранее Basic.
С соответствующими результатами.

Date: 2025-06-01 07:17 (UTC)
straktor: benders (Default)
From: [personal profile] straktor
Есть тулза по статической проверке типов, mypy, иногда довольно замысловато приходится уговаривать, что каст безопасный. В си проблема с типами тоже в том, что касты под рукой и void * там и сям, зазевался и привет. Нулы и там и там могут прокрасться. Качество не только в языке, а в процессе и в людях.

Заметим также, что веб-сайты почему-то на си/цпп не пишут, а ведь такой безопасный, по-вашему, язык. Я сервер на цпп видел, курьёз.

Date: 2025-06-01 07:25 (UTC)
straktor: benders (Default)
From: [personal profile] straktor
Конкретно тут, повангую, движок с плагинами и поменяли интерфейс между версиями, плагин передает не тот тип.
В терминах си, дллка плагина от старой версии бинарного интерфейса. Там бы просто не заметили ошибки, ну байты и байты, почему-то правда поведение странное.
В теории да, есть ком, касты зло. На практике джунский код на си в среднем тоже параша.

Date: 2025-06-01 08:55 (UTC)
lxe: (Default)
From: [personal profile] lxe
Как дренажная канавка? Да, может быть.

Date: 2025-06-01 17:28 (UTC)
mikerrr: (Default)
From: [personal profile] mikerrr
Питон для всех, остальные языки - только для "настоящих программистов")

Date: 2025-06-01 18:41 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

А потом, после выброса исключения? Программисты, которые не проверяют код возврата точно так же не будут ловить исключения.

Date: 2025-06-01 18:51 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

А другие не всегда. Мне попадалось много C/C++ кода, авторы которого проверкой кодов возврата не заморачивались. С аргументацией типа "а что я могу по этому поводу сделать?" или "тесты проходят, значит всё нормально".

Date: 2025-06-01 23:42 (UTC)
lxe: (Default)
From: [personal profile] lxe
В отличие от кода возврата, для того, чтобы проигнорировать исключение, нужно явно выразить свое намерение.
В Java этому служит механизм checked exceptions.
Edited Date: 2025-06-01 23:43 (UTC)

Date: 2025-06-02 02:35 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Намерение программистов зачастую заключается в том, чтоб программа скомилировалась. Простейший способ этого достигнуть — поймать checked exception и сразу бросить unchecked exception, пасом в одно касание.

Date: 2025-06-02 09:05 (UTC)
lxe: (Default)
From: [personal profile] lxe
Питон — для тех, у кого период осцилляции в циклической последовательности (0, 1) равен единице.

Date: 2025-06-07 21:02 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
О боже мой. Да конечно. Квора вот так вот накарябана. Они всё гонят ни питоне, деплоят по сто раз в день, и тестируют после деплоймента. Ну, квора ж ни за что не отвечает.

Date: 2025-06-07 21:03 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Это как определять результат работы. Производительность программиста измеряется в долларах в час вообще-то.

Date: 2025-06-07 21:04 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Я уже лет двадцать как не проверяю код возврата, кроме как в шелл-скриптах. В скале у нас есть соответствующие монады.

Date: 2025-06-07 21:05 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Ну... не должно, но может. Даже в скале бывает NPE.

Date: 2025-06-07 21:08 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Да ещё как попадает.
Начнём с массива...
// Array to map lowercase to uppercase (ASCII 0-127)
    char conversion[128];
    
    // Initialize all characters to themselves
    for (int i = 0; i < 128; i++) {
        conversion[i] = (char)i;
    }
    
    // Map lowercase a-z to uppercase A-Z
    for (int i = 'a'; i <= 'z'; i++) {
        conversion[i] = (char)(i - 32); // ASCII difference between lower and upper case
    }


Ну и попробуем на отрицательных символах.

Date: 2025-06-07 21:09 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Rust, по идее, безопаснее всех. Не знал, что на нём веб сайты уже пишут, однако.

Date: 2025-06-08 04:14 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Код возврата, ловля исключений или монады — не так важно. Важно что программист предусмотрел возможность нештатного поведения и определил, что в этом случае делать. Если не предусмотрел и не определил, то при любом раскладе остаётся только прекращать выполнение программы, бросив всё как есть.

Date: 2025-06-08 06:00 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Нештатность тоже тема такая... мы разделяем, мысленно, поведение на штатное и нештатное. Условно это всё. Я б лучше сказал - "желательное" и "нежелательное", вроде иноагента.