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

Python 3.14.7: non-BMP className в Tk даёт ValueError, а не crash

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

Python 3.14.7: non-BMP className в Tk даёт ValueError, а не crash. Практическая инструкция отделяет симптом от соседних причин: синтетический fixture, отрицательный control, таблица наблюдений, критерий остановки и минимальный пакет для поддержки без production-данных.

Развилка до обновления

Короткая развилка: изменение действительно вошло в Python 3.14.7 — Для Tcl/Tk 8.x такой className теперь отклоняется ValueError вместо segfault; это не обещание одинакового поведения Tk 9. Но похожий внешний симптом может иметь другую причину. Здесь проверяется только боль «Имя класса окна содержит символ вне BMP, сборка связана с Tcl/Tk 8.x, и конструктор Tk ранее мог аварийно завершить весь интерпретатор.» и только запрос «как проверить tkinter Tk className с non-BMP символом на Tcl/Tk 8 в Python 3.14.7». Не переносите вывод на производительность, безопасность всего приложения или совместимость всех зависимостей: для этого нужны отдельные тесты и отдельные источники.

Сбор измеримых фактов

Практическая проверка T22-14 строится вокруг одного действия: в отдельном GUI child process вызвать Tk(className=...) с одним синтетическим non-BMP символом и немедленно уничтожить root, если он всё же создан. Подготовьте новый fixture для каждого повтора и пометьте события монотонным временем. Сначала соберите факт о build/runtime capability, затем — результат API. Не подменяйте недоступную среду похожей ОС или другим устройством: это уже новый вопрос, а не подтверждение текущего.

Матрица A/B/A2

Матрица решения включает три ветки. Первая — сравнить ASCII className, BMP Unicode className и non-BMP className, предварительно записав Tcl patchlevel. Вторая — target с тем же input, третья — повтор первой в новом процессе. Поля: «Tk version | class category | constructor result | exception class | child exit | root destroy marker». Сначала сравните capability и вход, потом exception/exit, и лишь затем делайте вывод. Это защищает от ложного зелёного статуса из-за cache, warmed state или случайного timing.

Когда вывод относится к issue

Ветка считается подтверждённой только когда ASCII и допустимый BMP проходят control, а non-BMP на Tk 8 завершается ValueError без сигнала и core dump. Если версия ведёт себя иначе, сохраните наблюдение без попытки объяснить его догадкой. Причиной могут быть backport, vendor patch, build option или тестовая ошибка. Отдельно пометьте, какой control отвергнут; это полезнее общего вывода «не работает».

Наблюдаемый rollback

Красный сигнал: не встраивать тест в рабочий GUI; прекратить сравнение, если нет display или фактическая версия Tk не соответствует проверяемой границе. Также завершайте child по watchdog, если он не достиг следующего marker. Возврат должен быть наблюдаемым: temp root пуст, сетевой stub закрыт, terminal/GUI state восстановлен, системный Python и environment не менялись. Такой rollback важнее попытки получить красивый passed.

Что передать сопровождающим

Если нужна помощь сопровождающих, подготовьте: версии Python/Tk, Unicode category без реального имени приложения, три результата конструктора и child exit code. Добавьте итоговый статус passed / not reproduced / blocked / failed control и одну строку об очистке. Не выдавайте форумный лид за факт: change boundary подтверждается release, changelog и первичной issue, а не количеством комментариев.

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

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

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

Ответы

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

Ваш ответ

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

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

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