Python 3.14.7: настройка reparse deferral не теряется во внешнем XML-парсере. Практическая инструкция отделяет симптом от соседних причин: синтетический fixture, отрицательный control, таблица наблюдений, критерий остановки и минимальный пакет для поддержки без production-данных.
Узкая граница исправления
Прямой ответ относится к одной границе: ExternalEntityParserCreate() теперь переносит настройку reparse deferral в subparser, поэтому GetReparseDeferralEnabled() не читает неинициализированное значение. Практический симптом, который надо отличить от соседних причин: Родительский XML-парсер получает явную настройку reparse deferral, а созданный им subparser мог сообщать неопределённое состояние, из-за чего аудит конфигурации расходился с реальным деревом парсеров. Поэтому статья не предлагает угадывать по названию модуля. Она отвечает на намерение «как проверить наследование reparse deferral в ExternalEntityParserCreate на Python 3.14.7» через короткий A/B-протокол, где отрицательный control важнее совпавшего текста ошибки. Массовость проблемы и пригодность обновления для конкретного проекта источниками не установлены.
Паспорт наблюдения
Паспорт наблюдения T22-02 начинается не с обновления, а с воспроизводимого шага: создать родительский pyexpat-парсер на синтетической строке без внешней сети, явно переключить reparse deferral и в обработчике создать ровно один subparser. Запускайте его в temp root, child process, pty, локальном stub или VM — в зависимости от требуемой поверхности. Назначьте лимит времени и ресурсов до старта. Сохраните только измеримые поля, а не полный environment dump; если нужная сборка, display, libc или optional module отсутствует, пометьте environment blocker и не имитируйте результат.
Сравнение без догадки
Не принимайте один удачный case. Выполните независимую ветку: повторить опыт с настройкой по умолчанию и с противоположным явным значением, создавая новый parser graph перед каждым запуском. Таблица наблюдений: «ветка | значение у родителя | значение у subparser | число созданных parser-объектов | класс исключения | exit code». Сравнивайте не впечатление, а тип результата, состав данных и границы времени. Повторите отрицательный control после target-ветки; расхождение говорит о скрытом состоянии, а не об исправлении Python.
Правило зелёной ветки
Решение принимается по правилу: дочерний парсер стабильно отражает явное значение родителя в обеих ветках, а новый control не наследует состояние прошлого процесса. Не путайте его с «процесс не упал» или «текст ошибки другой». Если target чист, но control не различает две гипотезы, добавьте наблюдение, а не новую статью. Если обновление меняет ещё зависимости, такой прогон не изолирует gh-154738; сначала восстановите одинаковую среду.
Красные флаги
Остановите опыт при первом условии: не разрешать внешние entity и сетевые URL; завершить child process при неожиданном callback, чтении файла или расхождении повторов. Не продолжайте после crash ради «ещё одного подтверждения». Верните среду к baseline: закройте socket/pty, уничтожьте root, завершите только созданный child, удалите temp fixture и проверьте resource inventory. Если rollback нельзя доказать, материал остаётся кандидатом и не должен публиковаться как прошедший проверку.
Минимальный тикет
Минимальный тикет состоит из: минимальный callback без содержимого XML, версия Python и Expat, последовательность setter/getter, таблица двух веток и stderr без адресов памяти. Отдельно приложите строки control/target/repeat и отметьте, на какой фазе возникло отклонение. Не присылайте реальные payload, credential или полный crash dump. Такой пакет позволяет воспроизвести границу gh-154738 без доступа к вашей инфраструктуре.
Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, даты и ссылки перепроверены. Реальные пользовательские данные не использовались.
Источники и проверка
- Python 3.14.7 release проверено 2026-08-29
- Python 3.14.7 changelog проверено 2026-08-29
- CPython issue #154738 проверено 2026-08-29
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.