Можно ли завершить импорт модуля Python чем-то вроде возврата?
Я хотел бы знать, есть ли способ написания кода модуля ниже без необходимости добавлять еще один уровень отступа весь код модуля.
# module code
if not condition:
# rest of the module code (big)
Я ищу что-то вроде этого:
# module code
if condition:
# here I need something like a `return`
# rest of the module code (big)
Обратите внимание, я не хочу выдавать исключение, импорт должен пройти нормально.
3 ответа
Я не знаю ни одного решения для этого, но я думаю, вы могли бы поместить весь свой код во внутренний модуль и импортировать его, если условие не выполняется.
Я не знаю, как это сделать. Единственное, что я мог себе представить, это сработало бы return
но это должно быть внутри функции.
Сложно сказать, не зная, какова ваша цель более высокого уровня. (Например, в каком состоянии? Почему это важно? Вы МЕРТВЫЙ УВЕРЕНЫ, что у вас нет проблемы с XY? Не могли бы вы просто сказать нам, какова ваша общая цель?) Также очень трудно сказать, не зная как будет называться модуль. (Как сценарий из командной строки? Импортируемый другим модулем?) И это очень помогло бы узнать (а), почему вы пытаетесь избежать отступов (Вторая мировая война закончилась, и нам не нужно распределять пробелы больше или, мягко говоря, Python - это язык, который использует отступы как СИНТАКТИЧЕСКУЮ ФУНКЦИЮ, поэтому, говоря: "Я не могу использовать эту синтаксическую функцию", я вижу странное ограничение для многих. Это похоже на отказ от if-then тесты: теоретически вы можете обойти это ограничение, возможно, иногда, но почему вы выходите на боксерский ринг со связанными руками за спиной?) и (б) почему вы не можете выбросить исключение (нет действительно: вы ПОЛНОСТЬЮ УВЕРЕНЫ, ЧТО АБСОЛЮТНО НЕ МОЖЕТЕ БРОСИТЬ НИКАКИХ ИСКЛЮЧЕНИЙ?).
На самом деле, все, что вы действительно сделали, это спросите: "Как мне сделать X, учитывая условия A, B и C?" вопрос, не указывая, почему вы хотите сделать X, или почему существуют условия A, B и C, или даже если вы на 100% уверены, что они существуют и их нельзя обойти.
Если вы на самом деле говорите: "Я не хочу нажимать {TAB} 40 раз во время написания функции", тогда реальная проблема в том, что вам нужен лучший текстовый редактор. Если вы на самом деле говорите: "Я считаю, что отступы эстетически неприятны", тогда вам следует подумать о том, (а) какова другая сторона аргумента; именно поэтому люди используют Python для отступов в качестве синтаксиса, чтобы быть полезным; (б) являются ли ваши собственные эстетические предпочтения в этом отношении более важными, чем причины, которые вы придумали в (а); и (c) является ли Python подходящим инструментом для вас лично для достижения любой вашей более масштабной цели. (Можно не любить отступы как синтаксическую особенность; но для Python это настолько основополагающе, что философская противоположность ему в той степени, в которой это исключено, является убедительным свидетельством того, что, возможно, Python не является идеальным языком для выполнения ваших задач программирования цели.) Если вы на самом деле говорите, что извлекли бы пользу из факторинга кода, который должен выполняться при двух разных обстоятельствах, в два модуля, то это принесло бы вам пользу для рефакторинга. Если вы говорите о том, что у вас есть спагетти-код, который невозможно перестроить, то это действительно первая проблема, которую нужно решить, прежде чем пытаться прервать импорт модулей.