tgoop.com/pyproglib/6572
Create:
Last Update:
Last Update:
Пора сыграть в любимую всеми игру: что делает этот код?
def foo():
try:
return os._exit()
finally:
return False
import os
foo()
Что он делает:
🔥 — возвращает
None
❤️ — возвращает
False
👍 — выбрасывает исключение
⚡️ — завершает процесс без вывода чего-либо
Объясните свои ответы в комментариях.
Ответ:
Возвращает False. Хотите знать почему? 🟢 Обычно os._exit завершает процесс без выполнения «обработчиков очистки» (блоков finally). Однако ему нужен один аргумент. Этот фрагмент кода забывает передать код выхода, поэтому вместо завершения процесса он выбрасывает TypeError. Затем блок finally тихо подавляет исключение из-за return. 🟢 Возврат из блока finally на самом деле так часто используется неправильно, что разработчики Python планируют сделать так, чтобы в будущем выпуске это вызывало SyntaxWarning. 🟢 Можно было бы подумать, что import os идёт после определения функции. Но в Python используется динамическая область видимости, так что это нормально. 🟢 Также можно перепутать sys.exit с os._exit. sys.exit работает, выбрасывая исключение SystemExit, которое было бы перехвачено и подавлено блоком finally. Но _exit напрямую завершает процесс:
-> Завершает процесс с кодом состояния n, не вызывая обработчики очистки, не сбрасывая буферы stdio и т.д.
🔗 Оригинал статьи: https://clc.to/uL6PfA
Библиотека питониста #междусобойчик