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

Python 3.14.7: настройка reparse deferral не теряется во внешнем XML-парсере

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

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 с помощью ИИ по открытым официальным и первичным источникам; факты, даты и ссылки перепроверены. Реальные пользовательские данные не использовались.

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

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

Ответы

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

Ваш ответ

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

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

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