2011-10-10 19 views
8

En mi código estoy usando variables de entorno, pero si (env.var) no existe, aparece el mensaje de error NAME_ENV_VAR: no existe tal variable, y mi script deja de ejecutarse. Por ejemplo, en la línea¿Cómo puedo evitar un error: ninguna variable de entorno?

myeval $env($File) 

recibo un error:

can't read "env(NIKE_TECH_DIR)": no such variable 
    while executing 
"myeval $env($File)" 
    (procedure "chooseRelevantFiles" line 39) 
    invoked from within 
"chooseRelevantFiles $::GlobalVars::reqStage" 
(file "/vobs/tavor/src/Scripts/ReproduceBug.tcl" line 575) 

¿Cómo puedo evitar este error y pasar a ejecutar mi script?

Respuesta

6

catch el error entonces usted puede hacer algo con él (por ejemplo, conectarse para más tarde, o utilizar una caída hacia atrás valor) y proceder con su guión

por ejemplo,

if {[catch {myeval $env($File)} result]} { 
    lappend log $result 
} 
#other stuff 
15

Se podría probar con info exists y utilizar un defecto si no se establece la variable de entorno, por ejemplo.

if {[info exists env($File)]} { 
    set filename $env($File) 
} else { 
    set filename /some/default/path 
} 
myeval $filename 
+0

+1 En general me gusta para evitar comprobando si algo en el sistema existe debido a las condiciones de carrera, pero en este caso es probable que sea apropiada –

+1

me gusta el 'upvar 0 :: env ($ cosas) myvar; si {[info existe myvar]} {... 'idioma algo mejor. Pero todo depende del gusto personal. – kostix

+0

@jk .: Capturar el error es mucho más lento que evitarlo - El manejo de errores de Tcl es _purposefully_ no hiper-rápido - pero ':: env' es un caso especial que es lento haga lo que haga (porque es un estado global del proceso que puede cambiarse fuera del control de Tcl). –

3

para comprobar si hay un elemento de matriz de la matriz como env mundial, no utilice [info exists $env(VAR)]. su lugar, debe utilizar:

if { [ array names env VAR ] != "" } { 
    puts "\nVAR exists and its value is $env(VAR)\n" 
} 
+0

¿Por qué? ¿Por qué no simplemente 'info existe env (VAR)'? ¿Por qué la combinación global para los nombres de la matriz? –

Cuestiones relacionadas