Резюме : Вы можете выполнить одну очередную обработку исключений с EXEC ()
обходное отзывание, передавая одноищерированный попробуйте
/ кроме
Блокировка как строка в такую функцию: EXEC («Попробуйте: Print (X) \ Nexcept: Печать (« Исключение! »)«)
Отказ Этот общий метод работает для всех пользовательских, даже многострочных, попробуйте и кроме блоков. Однако вы должны избегать этого кода одноклассника из-за плохой читаемости.
Удивительно, удивительно, было обсуждение Около однострочной обработки исключений на официальном списке рассылки Python в 2013 году. Однако с тех пор в Python в Python не было новых функций «однонаправленного исключения» в Python. Итак, нам нужно придерживаться методами, показанными в этом руководстве. Но они будут веселыми обещанными!
Давайте погрузимся в проблему:
Проблема : Как написать попробовать/кроме блока в одной строке кода Python?
Пример : Рассмотрим следующую попытку/кроме блока.
try: print(x) except: print('Exception!')
Решение Перед тем, как мы погрузимся в каждый из трех методов, чтобы решить эту проблему, давайте будем быстрым обзором в нашем интерактивном коде оболочке:
Упражнение : Запустите код. Почему только три строки вывода? Измените код такого, что каждый из четырех методов генерирует вывод!
Метод 1: Темнарный оператор
Следующий метод для замены простой попытки/кроме оператора основан на тройном операторе.
Торговый оператор фон : Самый простой тройной оператор х если с остальными y
состоит из трех операндов х
, C
. и y
Отказ Это выражение с возвращаемой стоимостью. Темнарный оператор возвращает х
Если логическое выражение C
. оценивает Правда
Отказ В противном случае, если выражение C
. оценивает Ложь
Торговый оператор возвращает альтернативу y
Отказ
Вы можете использовать dir ()
Функция, чтобы проверить, название переменной 'x'
уже был определен с использованием условия 'x' в Dir ()
Отказ Если условие оценивает Правда
Вы запускаете блок попробовать. Если это оценивает Ложь
, вы запускаете кроме блока.
# Method 1 print(x) if 'x' in dir() else print('Exception!')
Выход этого фрагмента кода как автономный код:
Exception!
Это потому, что переменная х
не определен, и он не отображается в каталоге имени переменной:
print(dir()) # ['__annotations__', '__builtins__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
Например, если вы заранее определяете переменную X, код будет проходить через:
x = 2 print(x) if 'x' in dir() else print('Exception!')
Недостатком этой техники является то, что вам нужно знать, какие исключения могут возникнуть. Кроме того, становится сложнее выразить многострочную попытку, кроме блоков. В этом случае часто лучше использовать явную попытку/кроме утверждений в первую очередь!
Способ 2: EXEC ()
EXEC ()
Функция принимает строку и запускает строку, как если бы она была часть исходного кода. Таким образом, вы можете сжать любой алгоритм в одну строку. Вы также можете сжать попытку/кроме оператора в одну строку кода таким образом!
# Method 2 exec('try:print(x)\nexcept:print("Exception!")')
Если вы бы определили переменную X заранее, результат будет другим:
exec('x=2\n' + 'try:print(x)\nexcept:print("Exception!")') # 2
Теперь определяется переменная 2 и блок TRY BLOCK из оператора работает без исключения.
Способ 3: ContextLib Suppress + с оператором
Если вы на самом деле не заинтересованы в кроме первой части, и вам просто нужно делать исключения, этот метод может быть для вас:
# Method 3 from contextlib import suppress with suppress(NameError): print(x)
Вы используете с блоком и напишите его в одну строку Отказ Объект, который вы проходите в блок, должны определить две функции __enter __ ()
и __exit __ ()
Отказ Вы используете подавить () Метод от Contextlib
Пакет для создания такого объекта (так называемый менеджер контекста ), который подавляет возникновение NameError. Красота с блоком состоит в том, что она гарантирует, что все ошибки на с
Объект обрабатывается, и объект правильно закрыт через __exit __ ()
метод.
Недостатком или преимущество-в зависимости от ваших предпочтений – это то, что нет, кроме блока.
Спасибо за чтение этого руководства в блоге! 🙂.
Python One-Liners Книга
Python Programmemers улучшит свои навыки информатики с этими полезными одноклассниками.
Python One-listers научит вас читать и писать «одноклассники»: краткие заявления полезных функций, упакованных в одну строку кода. Вы узнаете, как систематически распаковать и понимать любую строку кода Python и писать красноречие, мощно сжатый Python, как эксперт.
Пять главных глав на пять глав обложки советы и трюки, регулярные выражения, машинное обучение, самые темы науки о данных и полезные алгоритмы. Подробные объяснения одноклассников вводят ключевые концепции компьютерных наук и повысить ваши кодировки и аналитические навыки. Вы узнаете о продвинутых функциях Python, такие как понимание списка, нарезки, нарезки, функции лямбда, регулярные выражения, карта и уменьшения функций и нарезки нарезки. Вы также узнаете, как:
• Используйте структуры данных для решения реальных проблем, такие как использование булевой индексации для поиска городов с загрязнением выше среднего • Используйте Numpy Basics, такие как массив, форма, ось, тип, вещание, расширенная индексация, нарезка, сортировка, поиск, агрегация и статистика • Рассчитайте базовую статистику многомерных массивов данных и алгоритмы K-означает для безоговорочного обучения • Создайте более усовершенствованные регулярные выражения с помощью группировки и названных групп, отрицательные LookAeads, сбежавшие символы, пробелы, наборы символов (и наборы отрицательных символов) и жадные/негридические операторы • Понимать широкий ассортимент темы компьютерных наук, включая анаграммы, палиндромы, сверты, перестановки, факториалы, простые числа, цифры фибоначчи, обфускации, поиск и алгоритмическую сортировку
К концу книги вы узнаете, как писать Python в его самых утонченных, и создавать краткие, красивые куски «Python Art» в простой строке.
Получите свой Python One-Liners сейчас !!
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.