Можно ли завершить импорт модуля Python чем-то вроде возврата? - PullRequest
7 голосов
/ 13 октября 2011

Я хотел бы знать, есть ли способ написания приведенного ниже кода модуля без необходимости добавлять еще один уровень отступа всего кода модуля.*

# module code
if condition:
    # here I need something like a `return`
# rest of the module code (big)

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

Ответы [ 3 ]

5 голосов
/ 13 октября 2011

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

1 голос
/ 13 октября 2011

Я не знаю, как это сделать.Единственное, что я могу себе представить, это будет работать return, но это должно быть внутри функции.

0 голосов
/ 25 июля 2016

Сложно сказать, не зная, какова ваша цель более высокого уровня.(Например, в каком состоянии? Почему это важно? Вы МЕРТВЫЙ УВЕРЕНЫ, что у вас нет проблемы XY? Не можете ли вы просто сказать нам, какова ваша общая цель?) Также очень трудно сказать, не знаякак будет называться модуль.(Как сценарий из командной строки? Импортируемый другим модулем?) И это очень помогло бы узнать (а), почему вы пытаетесь избежать отступов (Вторая мировая война закончилась, и нам не нужно распределять пробелыбольше или, мягко говоря, Python - это язык, который использует отступы как СИНТАКТИЧЕСКУЮ ФУНКЦИЮ, поэтому, говоря: «Я не могу использовать эту синтаксическую особенность», многие сталкиваются со странным ограничением. Это похоже на отказ от if-thenтесты: теоретически вы можете обойти это ограничение, возможно, иногда, но почему вы выходите на боксерский ринг со связанными за спиной руками?) и (б) почему вы не можете выбросить исключение (нетдействительно: действительно ли вы уверены, что АБСОЛЮТНО НЕ МОЖЕТЕ БРОСИТЬ НИКАКИХ ИСКЛЮЧЕНИЙ?).

На самом деле, все, что вы действительно сделали, это спросили: «Как мне сделать X, учитывая условия A, B,а с?вопрос, не указав, почему вы хотите выполнить X, или почему существуют условия A, B и C, или даже если вы на 100% уверены, что они существуют и их нельзя обойти.

Если вына самом деле говорят: «Я не хочу нажимать {TAB} 40 раз при написании функции», тогда реальная проблема в том, что вам нужен лучший текстовый редактор.Если вы на самом деле говорите: «Мне кажется, что отступы эстетически неприятны», тогда вам следует подумать о том, (а) какова другая сторона аргумента;именно поэтому люди, использующие Python, используют отступы как синтаксис, чтобы быть полезными;(б) являются ли ваши собственные эстетические предпочтения в этом отношении более важными, чем причины, которые вы выдвинули в (а);и (c) является ли Python подходящим инструментом для вас лично для достижения любой вашей более масштабной цели.(Можно не любить отступы как синтаксическую особенность; но для Python это настолько основополагающе, что философская противоположность ему в той степени, в которой это исключено, является убедительным свидетельством того, что, возможно, Python не является идеальным языком для выполнения ваших задач программированияцели.) Если вы на самом деле говорите, что извлекли бы пользу из факторинга кода, который должен выполняться при двух разных обстоятельствах, в два модуля, то это принесло бы вам пользу для рефакторинга.Если вы говорите о том, что у вас есть спагетти-код, который невозможно перестроить, то это действительно первая проблема, которую нужно решить, прежде чем пытаться прервать импорт модулей.

...