Кажется, что первый фрагмент (из книги) написан для Python 2. В Python 2 строки байтов (тип str
) и строки Unicode (тип unicode
) могут быть смешаны - иногда это работаетиногда он вызывает UnicodeError, а иногда выдает мусорный текст ("mojibake").
Однако вы, очевидно, работаете с Python 3 (что хорошо!), где два типа строк несовместимы: вы можетеНе смешивайте байтовые строки (тип bytes
) и строки Unicode (тип str
).
Фрагмент "рабочий код" выглядит хорошо для меня, нет необходимости что-либо менять (хотя использование with
Заявление об открытии файла было бы неплохо).Он не создает никаких UnicodeError, потому что в очень редких случаях происходит сбой кодирования в UTF-8.Если бы произошла ошибка, она была бы обработана вашим предложением except
.
Вероятно, нет необходимости полностью понимать, почему первый фрагмент не работает.Просто отбросьте «код ошибки» и попробуйте найти более свежую книгу, посвященную Python 3. Python 2 скоро будет прекращен, вам не придется беспокоиться об этом, если вы новичок в Python.