неявные кодировки питона
только что я исследовал и починил любопытную проблему, связанную с переходом на Python 3. Одно из краеугольных новведений в этой версии языка — прозрачная (неявная) работа с кодировками. Строки спокойно пишутся и читаются, не нужно возиться со всякими явными .decode
и .encode
, всё очень удобно. Конечно, за некоторое время пользования предыдущей версией я более-менее наловчился вставлять эти функции в правильных местах, но это было неаккуратненько, поэтому на новую версию я перешёл с радостью.
но обновлённые скрипты срабатывали не всегда. Неуловимости им добавляла некоторая незрелость запускавшей их программы, которая отказывалась посылать их вывод на почту, как всякий порядочный крон. Эту проблему удалось решить, и я увидел в логах питоновские ошибки перекодирования. Но как?! При запуске-то вручную всё отрабатывало на ура!
потом я вспомнил про переменные окружения. В шелле был задан язык, и питон его подхватывал. А при автоматическом запуске язык не был указан, и питон не знал, какую кодировку использовать. Пришлось настраивать окружение вручную.