PYPROGLIB Telegram 6572
🧩 Python-загадка

Пора сыграть в любимую всеми игру: что делает этот код?
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

Библиотека питониста #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
23👍157🔥2😢1



tgoop.com/pyproglib/6572
Create:
Last Update:

🧩 Python-загадка

Пора сыграть в любимую всеми игру: что делает этот код?

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

Библиотека питониста #междусобойчик

BY Библиотека питониста | Python, Django, Flask


Share with your friend now:
tgoop.com/pyproglib/6572

View MORE
Open in Telegram


Telegram News

Date: |

Content is editable within two days of publishing Telegram channels enable users to broadcast messages to multiple users simultaneously. Like on social media, users need to subscribe to your channel to get access to your content published by one or more administrators. Hui said the time period and nature of some offences “overlapped” and thus their prison terms could be served concurrently. The judge ordered Ng to be jailed for a total of six years and six months. The optimal dimension of the avatar on Telegram is 512px by 512px, and it’s recommended to use PNG format to deliver an unpixelated avatar. Channel login must contain 5-32 characters
from us


Telegram Библиотека питониста | Python, Django, Flask
FROM American