К обсуждениям

Python 3.15 RC1: sentinel для различения «не передано» и None

Редакция VOne Технологии

Практическая проверка Python 3.15 RC1: как проверить встроенный sentinel Python 3.15 для аргумента где None является допустимым значением. Изолированный fixture, отрицательный контроль, заранее заданный критерий и безопасный пакет диагностики.

Три состояния вместо двух

PEP 661 добавляет встроенную фабрику sentinel() для уникальных placeholder-значений, когда None нельзя использовать как признак отсутствия. Это подтверждает только границу функции, а не наличие проблемы в конкретном проекте. Практический симптом уже: Функция должна различать пропущенный аргумент, явно переданный None и обычное значение, но самодельный object() даёт неинформативный repr и неявный контракт. До изменения кода зафиксируйте версию runtime, способ установки, один ожидаемый результат и один отрицательный исход. RC1 остаётся предварительным выпуском: его проверяют в отдельной среде, не ставят поверх рабочего interpreter и не используют один удачный запуск как разрешение на migration.

Минимальная функция с MISSING

Рекомендуемый fixture: написать чистую функцию update(value=MISSING) с MISSING=sentinel('MISSING') и тремя ветками: аргумент опущен, передан None, передана строка; сохранить только тип ветки и repr маркера. Дайте ему метку T23-03, отдельный temp root и короткий deadline. Входы должны быть синтетическими, повторяемыми и минимальными; каждый новый запуск получает новые объекты и процесс, если cache или global state способны изменить наблюдение. До опыта запишите точную команду и ожидаемый class результата. Не включайте рабочие конфиги, адреса, токены, персональные строки, production PID или полные environment dumps.

Контроль против None и object

Опровергающий маршрут: повторить ту же таблицу с None как default и с object(); отдельно проверить identity внутри одного процесса, copy/deepcopy и только те операции сериализации, которые прямо поддержаны реализацией. Собирайте строки формата «вызов | аргумент фактически передан | ветка | repr default | identity | сериализация поддержана или нет». Порядок control A, target B, fresh control A2 обнаруживает загрязнение fixture: если A2 расходится с A, итог нельзя помечать passed. Пустое поле не равно нулю, отсутствие exception не доказывает правильную семантику, а изменение двух параметров сразу лишает опыт диагностической силы. Соседние причины получают отдельные строки, а не удобное общее объяснение.

Контракт, а не красивый repr

Зелёный критерий сформулирован заранее: три состояния однозначно различаются, публичная сигнатура объяснима, а тесты не полагаются на случайный адрес object() или равенство пользовательского объекта. Ветка not reproduced означает только отсутствие симптома в этой версии fixture; blocked означает нехватку capability или источника; failed control возвращает расследование к стенду. Стоп-линия: {item['stop']}. Нельзя добиваться зелёного результата отключением проверки, broad except, ростом лимита, повторением до случайного успеха или подменой предварительного release стабильным обещанием. После теста удаляются только созданные temp-ресурсы.

Граница между процессами

Для maintainer или поддержки подготовьте: сигнатура минимальной функции, три вызова, repr и результаты identity/copy без рабочих payload, имён пользователей и содержимого очередей. Добавьте label T23-03, московский timestamp, точную версию RC и формулировку критерия «три состояния однозначно различаются, публичная сигнатура объяснима, а тесты не полагаются на случайный адрес object() или равенство пользовательского объекта». Секреты, IP, hostnames, usernames, абсолютные домашние пути и полные логи удалите. Официальные источники подтверждают изменение «PEP 661 добавляет встроенную фабрику sentinel() для уникальных placeholder-значений, когда None нельзя использовать как признак отсутствия.», но не подтверждают результат вашего теста, частоту проблемы или необходимость менять production. Такой пакет позволяет воспроизвести одну ветку, не раскрывая данные и не смешивая её с соседними issues.

Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, даты и ссылки перепроверены. Реальные пользовательские данные не использовались.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.