2011-08-12 20 views
8

Estoy moviendo un script de Perl (del cual tengo muy poco conocimiento) a Python.Traducir Perl a Python: haz esto o muere

$path = $ENV{ 'SOME_NAME' } || die " SOME_NAME ENV VARIABLE NOT FOUND\n"; 

puedo (con suerte) ver lo que hace esta línea, ya sea establecer el 'camino' variable a la variable de entorno 'SOME_NAME' o en su defecto a continuación, imprimir un mensaje de error al usuario. (Nota al margen: ¿Alguien sabe cómo conseguir un motor de búsqueda para buscar caracteres especiales como '||'?)

He intentado implementarlo de una manera "pitonica" (es más fácil pedir perdón que permiso) usando :

try: 
    path = os.environ['SOME_NAME'] 
except KeyError,e: 
    print "SOME_NAME ENVIRONMENT VARIABLE NOT FOUND\n" 
    raise e 

pero esto parece bastante engorroso, especialmente porque lo estoy haciendo para 3 variables de entorno diferentes.

¿Alguna idea de si hay una mejor implementación o diría que esta es la forma "pitónica" de hacerlo?

Muchas Gracias

+0

Acerca de su pregunta de Google, [ayuda de google] (http://www.google.com/support/websearch/bin/static.py?hl=es&page=guide.cs&guide=1221265&answer=134479&rd=1): 'Generalmente , se ignora la puntuación, incluyendo @ # $%^& *() = + [] \ y otros caracteres especiales. Probablemente no se puede hacer mucho al respecto. – Jacob

+0

. Pensé tanto, me preguntaba si había un motor de búsqueda por ahí que ¡no los ignoró, sería útil especialmente cuando se buscan cosas como esta! – Jdog

+0

@Jdog Es posible que pueda obtener algo significativo si busca el nombre del personaje en google. Para que expample busque '||' escriba "barras verticales perl". En todo caso, [las páginas de wikipedia] (http://en.wikipedia.org/wiki/Pipe_character) en caracteres y símbolos generalmente enumeran para qué se utilizan en muchos lenguajes de programación. – MattLBeck

Respuesta

11
try: 
    path = os.environ['SOME_NAME'] 
    var2 = os.environ['VAR2'] 
    var3 = os.environ['VAR3'] 
    var4 = os.environ['VAR4'] 
except KeyError,e: 
    print "Not found: ", e 

Se puede poner más de una sentencia en un bloque try.

+0

Sí, estaba pensando que tenía que separar para poder decirle al usuario cuál falta, pero eso estará contenido en el rastreo de la excepción, por supuesto ... ¡Salud! – Jdog

6

Lo que tienes allí es en realidad un modismo bastante común, y podría decirse que es el patrón preferido. O simplemente deja pasar la excepción normal sin imprimir nada extra. Python tiene el mismo efecto de forma nativa. Así,

path = os.environ["SOME_NAME"] 

se acaba de levantar una excepción KeyError por sí mismo y el comportamiento por defecto es para salir de excepciones no capturadas. El rastreo le mostrará qué y dónde.

Sin embargo, también puede proporcionar un valor predeterminado, si eso es posible.

path = os.environ.get("SOME_NAME", "/default/value") 

Esto no generará un error y puede hacer algo sensato como acción predeterminada.