2011-10-13 11 views
6

Me gustaría saber si hay una forma de escribir el siguiente código de módulo sin tener que agregar otro nivel de sangría a todo el código del módulo.¿Es posible finalizar una importación de módulo python con algo así como una devolución?

# module code 
if not condition: 
    # rest of the module code (big) 

Busco algo como esto:

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

Nota, no quiero lanzar una excepción, la importación debe pasar normalmente.

+9

no sé de cualquier solución a eso, pero supongo que se podría colocar todo el código en un módulo interno e importar que si no se cumple la condición. – UncleZeiv

+0

@UncleZeiv: ¡es una buena idea, debe publicarlo como respuesta! – SingleNegationElimination

+0

¿Qué pasa con la aversión a la indentación? –

Respuesta

5

no sé de cualquier solución a eso, pero supongo que se podría colocar todo el código en un módulo interno e importar que si no se cumple la condición.

+0

Gracias, si nadie viene con una idea mejor en pocos días, esta sigue siendo la respuesta correcta. – sorin

1

No conozco ninguna manera de hacer esto. Lo único que podría imaginar que funcionaría sería return pero eso tiene que estar dentro de una función.

0

Es súper difícil de decir sin saber cuál es su meta de nivel superior es. (Por ejemplo, ¿cuál es la condición? ¿Por qué es importante? ¿Está MUERTO DE QUE no tiene un problema XY aquí? ¿No puede decirnos cuál es su objetivo general?) También es muy difícil de decir sin saber cómo se llamará al módulo. (Como un guión de la línea de comando? Al ser importado por otro módulo?) Y ayudaría mucho saber (a) por qué está tratando de evitar la sangría (la Segunda Guerra Mundial ha terminado, y no necesitamos racionar los espacios más, o, para decirlo con más amabilidad, Python es un lenguaje que usa la sangría como una FUNCIÓN SINTATICA, por lo que decir "No puedo usar esta característica sintáctica" afecta a muchas personas como una restricción extraña. Es como renunciar a si-entonces Pruebas: en teoría, podría ser capaz de evitar esa restricción, posiblemente, a veces, pero ¿por qué va al ring de boxeo con las manos atadas a la espalda?), y (b) por qué no puede lanzar una excepción (no , de verdad: ¿está TOTALMENTE SEGURO de que ABSOLUTAMENTE NO PUEDE LANZAR NINGUNA EXCEPCIÓN?).

Así las cosas, lo único que ha hecho es pedir a un "¿cómo lo hago X, condiciones dadas A, B, y C?" pregunta, sin indicar por qué quieres hacer X, o por qué existen las condiciones A, B y C, o incluso si estás 100% seguro de que existen y no se pueden evitar.

Si lo que estás diciendo en realidad es "no quiero golpear {TAB} 40 veces al escribir una función," entonces el verdadero problema es que se necesita una mejor editor de texto. Si lo que realmente está diciendo es "encuentro que la sangría es estéticamente desagradable", entonces debería pensar en (a) cuál es el otro lado del argumento; es decir, por qué el uso de la sangría por parte de Python como sintaxis es útil; (b) si sus propias preferencias estéticas a este respecto son más importantes que las razones por las que ha surgido en (a); y (c) si, dadas estas cosas, Python es la herramienta adecuada para que usted la use personalmente para lograr lo que sea su objetivo a mayor escala. (Está bien que no me guste la sangría como una característica sintáctica, pero esto es tan básico para Python que ser filosóficamente opuesto a él en una medida que lo descarta es una fuerte indicación de que tal vez Python no es el lenguaje ideal para que usted logre su programación objetivos en). Si lo que realmente está diciendo es que se beneficiaría de un código de factorización que necesita ejecutarse en dos conjuntos de circunstancias diferentes en dos módulos, entonces le beneficiaría refactorizar. Si lo que dices es que tienes un código de spaghetti que termina siendo totalmente imposible de refactorizar, entonces ese es realmente el primer problema que se debe abordar, antes de intentar abortar las importaciones de módulos.

Cuestiones relacionadas