"Или die ()" в Python

Кто-нибудь использует что-либо подобное в Python:

def die(error_message): raise Exception(error_message) ... check_something() or die('Incorrect data') 

Я думаю, что этот стиль используется в PHP и Perl.

Вы находите какие-либо преимущества в этом [стиле]?

6 Solutions collect form web for “"Или die ()" в Python”

Ну, во-первых, sys.exit([arg]) является более распространенным явлением, и если вы действительно хотите что-то эквивалентное, чтобы die в PHP, вы должны использовать это, вызвать ошибку SystemExit или вызвать os._exit .

Основное использование метода die в PHP: «Скрипт достиг некоторого тупика, который не может оправиться от него». Это редко, если вообще когда-либо используется на производственном коде. Вам лучше создать исключение в вызываемой функции, поймать ее в родительском элементе и найти изящную точку выхода – это лучший способ на обоих языках.

У Лота хорошие ответы, но никто еще не предложил очевидный способ написать это в Python:

 assert check_something(), "Incorrect data" 

Просто имейте в виду, что он не будет делать проверку, если вы включите оптимизацию, а не то, что когда-либо делали.

Хотя этот стиль распространен в PHP и Perl, он очень не-Pythonic, и я бы посоветовал вам не писать Python таким образом. Вы должны следовать соглашениям на используемом вами языке и писать что-то вроде этого:

 if not check_something(): raise Exception('Incorrect data') 

FWIW, делая способ «или умереть (…)» добавляет еще один уровень к вашей трассировке стека, что является еще одним незначительным недостатком.

Самый большой недостаток заключается в том, что все умирающие сейчас одни и те же. Лучше иметь check_something() чтобы получить более точное исключение, а затем, если необходимо, поймать выше.

Если вы имеете дело с API, который вы не пишете, который возвращает правдивые значения при успешном и ложном значениях при сбое, это выглядит как достаточно читаемый и компактный способ сделать это. Если у вас есть контроль над API, я бы рекомендовал использовать исключения вместо возвращаемых значений для указания ошибок.

Если вы используете эту функцию, ее, вероятно, не следует называть die() если она фактически не выйдет из программы. Если это просто вызывает исключение, нет никакой гарантии, что программа действительно умрет. В идеале вы можете назвать его raise() как функциональную версию выражения raise , но, конечно, вы не можете, потому что raise – это зарезервированное слово. Возможно, throw() .

Также было бы неплохо потребовать, чтобы вызывающий передал тип исключения, поскольку Exception является довольно общим и неопределенным.

Мне приходит в голову, что эта функция будет ненужной, если бы только исключения на Python были способны к повышению, т. Е. У них был метод для нее:

 class BaseException(object): def throw(self): raise self 

Тогда вы могли бы просто сделать:

 check_something() or Exception("check failed").throw() 

К сожалению, исключения Python не могут поднять себя. 🙂

Похоже, вы просто обертываете php lingo в python с помощью одной линии. Я бы посоветовал это, так как вы могли бы смутить вашу аудиторию. Исключения также являются совершенно другим зверем, чем смерть в PHP.

Python - лучший язык программирования в мире.