👍3💩2👎1
Использование пустой конструкции except может привести к серьезным проблемам:
«Программист здесь предполагает, что единственным видом ошибок, которые могут произойти при индексировании словаря, будет отсутствующий ключ. Но поскольку имя myditctionary написано неправильно (должно быть mydictionary), интерпретатор Python взамен генерирует исключение NameError для ссылки на неопределенное имя, которое обработчик молча перехватывает и игнорирует».
Что происходит в коде:
— Переменная mydictionary определена корректно;
— В блоке try используется неправильное имя myditctionary (с опечаткой);
— Это вызывает NameError, а не ожидаемый KeyError;
— Пустой except перехватывает любую ошибку, включая NameError;
— Программа продолжает выполнение, маскируя реальную проблему.
«В качестве эмпирического правила: будьте в своих обработчиках как можно более конкретными — пустые конструкции except и перехват суперкласса Exception удобны, но потенциально подвержены ошибкам».
👍3👎1
❤1👍1👎1
Причина вывода False — разные типы данных:
В Python 3 это принципиально разные типы. Сравнение 𝚜𝚝𝚛 == 𝚋𝚢𝚝𝚎𝚜 всегда возвращает False, даже если они визуально одинаковы, потому что объекты разных типов не равны.
В официальной документации Python указано:
«Байтовые литераты всегда сопровождаются префиксом b, это генерирует объект типа 𝚋𝚢𝚝𝚎𝚜, не 𝚜𝚝𝚛».
«Поддержка устаревшего Unicode-литерала (u'spam') была вновь введена для упрощения поддержки кода, работающего как на Python 2.x, так и на Python 3.x».
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1👎1
Как можно создать текстовый файл Unicode в формате специфической кодировки?
Anonymous Quiz
72%
Передать имя кодировки в open() с параметром encoding
9%
Использовать json с ensure_ascii=False
14%
Применить str.encode() и записать байты в двоичном режиме
5%
Использовать pickle с протоколом 3
❤2👍1👎1
«При работе с JSON-файлами в текстовом формате используйте encoding="utf-8" при открытии файла для чтения и записи».
𝚏 = 𝚘𝚙𝚎𝚗('𝚠𝚘𝚛𝚔𝚏𝚒𝚕𝚎', '𝚠', 𝚎𝚗𝚌𝚘𝚍𝚒𝚗𝚐="𝚞𝚝𝚏-𝟾")
Почему вариант 1 — правильный
Другие варианты (например, str.encode() с записью байтов, использование JSON или pickle) не являются подходящими для создания текстового файла в нужной кодировке — они либо статичны, либо служат для других целей.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👎1
❤2👍1👎1
«Методы __𝚐𝚎𝚝𝚊𝚝𝚝𝚛__ и __𝚜𝚎𝚝𝚊𝚝𝚝𝚛__ автоматически запускаются, когда экземпляр задействован в контексте, описанном справа в комментарии:
— 𝚍𝚎𝚏 __𝚐𝚎𝚝𝚊𝚝𝚝𝚛__(𝚜𝚎𝚕𝚏, 𝚗𝚊𝚖𝚎): При извлечении неопределённых атрибутов
— 𝚍𝚎𝚏 __𝚜𝚎𝚝𝚊𝚝𝚝𝚛__(𝚜𝚎𝚕𝚏, 𝚗𝚊𝚖𝚎, 𝚟𝚊𝚕𝚞𝚎): При присваивании всех атрибутов
В данном коде:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👎1