TGViewer
Channel Public Channel
Python: задачки и вопросы

Python: задачки и вопросы

@quiz_python

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

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Другие наши проекты: https://tprg.ru/media
Subscribers
6.93K
Photos
1.4K
Videos
1
Links
127

Showing posts older than #4249 · Back to latest

Older Posts 20 shown
Post #4248 828
Марк Лутц, «Изучаем Python», глава 36:

Использование пустой конструкции except может привести к серьезным проблемам:

«Программист здесь предполагает, что единственным видом ошибок, которые могут произойти при индексировании словаря, будет отсутствующий ключ. Но поскольку имя myditctionary написано неправильно (должно быть mydictionary), интерпретатор Python взамен генерирует исключение NameError для ссылки на неопределенное имя, которое обработчик молча перехватывает и игнорирует».

Что происходит в коде:
— Переменная mydictionary определена корректно;
— В блоке try используется неправильное имя myditctionary (с опечаткой);
— Это вызывает NameError, а не ожидаемый KeyError;
— Пустой except перехватывает любую ошибку, включая NameError;
— Программа продолжает выполнение, маскируя реальную проблему.

«В качестве эмпирического правила: будьте в своих обработчиках как можно более конкретными — пустые конструкции except и перехват суперкласса Exception удобны, но потенциально подвержены ошибкам».
  • 👍 3
  • 👎 1
Post #4247 726
  • 👍 3
  • 💩 2
  • 👎 1
Post #4245 823
Марк Лутц, «Изучаем Python», глава 36:

«В коде используется удобная функция `print_exc` из модуля `traceback`, которая по умолчанию потребляет данные `sys.exc_info`»

Исключение уже было перехвачено блоком except Exception. Когда происходит деление на ноль в функции inverse(0), Python генерирует `ZeroDivisionError`, но этот блок except перехватывает исключение и предотвращает его дальнейшее распространение.

После перехвата исключения:
1. `traceback.print_exc(file=open('badly.exc', 'w'))` - записывает информацию об ошибке в файл `badly.exc`
2. `print('Bye')` - выполняется нормально, так как исключение уже обработано

«traceback.print_exc() потребляет данные sys.exc_info - это означает, что функция извлекает информацию о последнем исключении и форматирует её для вывода, но не прерывает выполнение программы.
  • ❤ 2
  • 👍 1
  • 👎 1
Post #4244 687
  • ❤ 2
  • 👍 1
  • 👎 1
Post #4242 825
Марк Лутц, «Изучаем Python», глава 36:

«Результат вызова sys. exc inf о, который применялся в предшествующих двух разделах, дает возможность обработчику исключений получать доступ к самому последнему cгенерированному исключению обобщенным образом. Это особенно полезно при использовании пустой конструкции except для слепого перехвата всех исключений,
чтобы выяснить, какое исключение было сгенерировано:

import sys

try:
...
except:
# sys.exc_info()[0:2] представляет класс и экземпляр исключения

Если никакие исключения не обрабатывались, тогда такой вызов возвращает кортеж с тремя значениями None. В противном случае значениями будут (type, value, traceback):

— type — класс обрабатываемого исключения;
— value — экземпляр класса исключения, который был сгенерирован;
— traceback — объект трассировки, который представляет стек вызовов в месте,

где первоначально возникло исключение, и применяется модулем traceback для генерации сообщений об ошибках».
  • 👍 2
  • ❤ 1
  • 👎 1
Post #4241 723
  • 👍 1
  • 👎 1
Post #4239 827
Код выводит:

Поймано: RuntimeError
Причина: ValueError

D функции process_data() происходит попытка преобразовать строку "abc" в целое число, что вызывает ValueError. Затем это исключение перехватывается и перебрасывается как RuntimeError с помощью конструкции raise ... from e, которая сохраняет связь между исключениями. Внешний блок try-except ловит RuntimeError и выводит информацию о типе пойманного исключения и его причине через атрибут __cause__.
  • 👍 1
  • 👎 1
Post #4238 707
  • 👍 1
  • 👎 1
Post #4236 831
Все три способа валидны:

cities.str.contains("Las Vegas", na=False).any()
Выполняет поэлементный поиск подстроки (regex или литерал) внутри строк.

"Las Vegas" in cities.values
В Pandas Series.values возвращает numpy.ndarray. Выполняет проверку наличия точного значения в массиве NumPy.

cities.isin(["Las Vegas"]).any()
Проверяет для каждого элемента Series, содержится ли он в списке значений. Возвращает True, если хотя бы один элемент Series строго равен "Las Vegas".
  • 👍 1
  • 👎 1
Post #4235 706
  • 👍 1
  • 👎 1
Post #4233 812
Марк Лутц, «Изучаем Python», глава 34:

«В коде используется удобная функция print_exc из модуля traceback, которая по умолчанию потребляет данные sys.exc_info; после запуска сценарий выводит сообщение об ошибке в файл, что удобно в тестовых программах, которым необходимо перехватывать ошибки, но вдобавок полноценно их регистрировать».

В блоке обработки исключения вызывается traceback.print_exc(file=open('badly.exc','w')), который:
1️⃣ Открывает файл 'badly.exc' в режиме записи ('w')
2️⃣ Записывает в него полную информацию об исключении (traceback)
3️⃣ Закрывает файл

После успешной обработки исключения выполнение продолжается, и выводится "Bye". Таким образом, код не завершается с ошибкой, а успешно обрабатывает исключение и создает файл с информацией об ошибке.
  • 👍 2
  • 👎 1
Post #4232 657
  • 👍 2
  • 👎 1
Post #4230 788
Марк Лутц, «Изучаем Python», глава 34:

В данном коде присутствуют два активных оператора try — один в функции action1 и один на верхнем уровне модуля.

Функция action2() генерирует исключение TypeError при попытке сложить число 1 и пустой список [], поскольку складывать числа и последовательности нельзя.

«Когда action2 сгенерирует исключение `TypeError`, интерпретатор Python выберет и выполнит самый недавний try с совпадающей конструкцией except, которым в данном случае будет `try` внутри функции action1()».

Поэтому исключение `TypeError` будет перехвачено внутренним обработчиком except TypeError: print('inner try'), и на экран выведется 'inner try'.

Внешний `try` блок не выполнится, так как исключение уже было обработано на более глубоком уровне вложенности.
  • ❤ 2
  • 👍 1
  • 👎 1
Post #4229 671
  • 👍 1
  • 👎 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →