Вы находитесь на странице: 1из 6

TEMA

about_Trap
DESCRIPCIN BREVE
Describe una palabra clave que controla un error de terminacin.
DESCRIPCIN DETALLADA
Un error de terminacin detiene la ejecucin de una instruccin.
Si Windows PowerShell no controla un error de terminacin de
algn modo, tambin se detendr la ejecucin de la funcin o
script en la canalizacin actual. En otros lenguajes, como C#,
los errores de terminacin reciben el nombre de excepciones.
La palabra clave Trap especifica una lista de instrucciones que
se han de ejecutar cuando se produce un error de terminacin. Las
instrucciones Trap controlan los errores de terminacin y
permiten que la ejecucin del script o funcin contine en lugar
de detenerse.
Sintaxis
La instruccin Trap tiene la sintaxis siguiente:
trap [[<tipo de error>]] {<lista de instrucciones>}
La instruccin Trap incluye una lista de instrucciones para
ejecutarse cuando se produce un error de terminacin.
Opcionalmente, la palabra clave Trap puede especificar un tipo
de error. Un tipo de error requiere corchetes.
Un script o comando puede tener varias instrucciones Trap. Las
instrucciones Trap pueden aparecer en cualquier parte del
script o comando.
Interceptar todos los errores de terminacin
Cuando se produce un error de terminacin que no est
controlado de otra manera en un script o comando, Windows
PowerShell busca una instruccin Trap que controle el error. Si
hay una instruccin Trap, Windows PowerShell contina
ejecutando el script o comando en la instruccin Trap.
El ejemplo siguiente es una instruccin Trap muy simple:
trap {"Error detectado."}
Esta instruccin Trap intercepta cualquier error de
terminacin. El ejemplo siguiente es una funcin que contiene
esta instruccin Trap:
function TrapTest {
trap {"Error detectado."}

cadenaSinSentido
}
Esta funcin incluye una cadena "sin sentido" que produce un
error. La ejecucin de esta funcin devuelve lo siguiente:
C:\PS> TrapTest
Error detectado.
El ejemplo siguiente incluye una instruccin Trap que muestra
el error utilizando la variable automtica $_:
function TrapTest {
trap {"Error detectado: $_"}
cadenaSinSentido
}
La ejecucin de esta versin de la funcin devuelve lo siguiente:
C:\PS> TrapTest
Error detectado: El trmino 'cadenaSinSentido' no se
reconoce como nombre de un cmdlet, funcin, archivo de
script o programa ejecutable. Compruebe si escribi
correctamente el nombre o, si incluy una ruta de acceso,
compruebe que dicha ruta es correcta e intntelo de nuevo.
Las instrucciones Trap pueden ser tambin ms complejas. Una
instruccin Trap puede incluir varias condiciones o llamadas a
funciones. Puede registrar, probar o incluso ejecutar otro programa.
Interceptar errores de terminacin especificados
El ejemplo siguiente es una instruccin Trap que intercepta el
tipo de error CommandNotFoundException:
trap [System.Management.Automation.CommandNotFoundException]
{"Error de comando interceptado"}
Cuando una funcin o script encuentra una cadena que no
coincide con un comando conocido, esta instruccin Trap muestra
la cadena "Error de comando interceptado". Despus de ejecutar
cualquier instruccin de la lista de instrucciones Trap,
Windows PowerShell escribe el objeto de error en la secuencia
de error y, a continuacin, contina el script.
Windows PowerShell utiliza los tipos de excepcin de Microsoft
.NET Framework. El ejemplo siguiente especifica el tipo de
error System.Exception:
trap [System.Exception] {"Error interceptado"}
El tipo de error CommandNotFoundException se hereda del tipo

System.Exception. Esta instruccin intercepta un error creado


por un comando desconocido. Tambin intercepta otros tipos de error.
Se puede tener ms de una instruccin Trap en un script. Cada
error puede ser interceptado por slo una instruccin Trap. Si
se produce un error y hay ms de una instruccin Trap
disponible, Windows PowerShell utiliza la instruccin Trap con
el tipo de error ms representativo que coincide con el error.
El ejemplo de script siguiente contiene un error. El script
incluye una instruccin Trap general que intercepta cualquier
error de terminacin y una instruccin Trap concreta que
especifica el tipo CommandNotFoundException.
trap {"Otro error de terminacin interceptado" } trap
[System.Management.Automation.CommandNotFoundException] {"Error de
terminacin interceptado"} cadenaSinSentido
La ejecucin de este script produce el resultado siguiente:
Error de comando interceptado
El trmino 'cadenaSinSentido' no se reconoce como nombre de
un cmdlet, funcin, archivo de script o programa
ejecutable. Compruebe si escribi correctamente el nombre
o, si incluy una ruta de acceso, compruebe que dicha ruta
es correcta e intntelo de nuevo.
En C:\PS>testScript1.ps1:3 Carcter:19
+ cadenaSinSentido <<<<
Dado que Windows PowerShell no reconoce "cadenaSinSentido" como
un cmdlet u otro elemento, devuelve un error de tipo
CommandNotFoundException. Este error de terminacin lo
intercepta la instruccin Trap especfica.
El ejemplo de script siguiente contiene las mismas
instrucciones Trap con un error diferente:
trap {"Otro error de terminacin interceptado" } trap
[System.Management.Automation.CommandNotFoundException]
{"Error de comando interceptado"}
1/$null
La ejecucin de este script produce el resultado siguiente:
Otro error de terminacin interceptado
Intento de dividir por cero.
En C:PS> errorX.ps1:3 Carcter:7
+ 1/ <<<< $null
El intento de dividir por cero no crea un error de tipo
CommandNotFoundException, sino que ese error es interceptado
por la otra instruccin Trap, que intercepta cualquier error de
terminacin.

Interceptar errores y mbito


Si un error de terminacin se produce en el mismo mbito que la
instruccin Trap, despus de ejecutarse las instrucciones Trap,
Windows PowerShell contina en la instruccin despus del
error. Si la instruccin Trap est en un mbito diferente del
mbito del error, la ejecucin contina en la siguiente
instruccin que est en el mismo mbito que el de la
instruccin Trap.
Por ejemplo, si se produce un error en una funcin y la
instruccin Trap est en la funcin, el script contina en la
siguiente instruccin. Por ejemplo, el script siguiente
contiene un error y una instruccin Trap:
function funcin1 {
trap { "Un error: " }
CadenaSinSentido
"funcin1 completada"
}
Ms adelante en el script, la ejecucin de la funcin funcin1
produce el resultado siguiente:
funcin1
Un error:
El trmino 'CadenaSinSentido' no se reconoce como nombre de
un cmdlet, funcin, archivo de script o programa
ejecutable. Compruebe si escribi correctamente el nombre
o, si incluy una ruta de acceso, compruebe que dicha ruta
es correcta e intntelo de nuevo.
En C:\PS>TestScript1.ps1:3 Carcter:19
+ CadenaSinSentido <<<<
funcin1 completada
La instruccin Trap en la funcin intercepta el error. Despus
de mostrarse el mensaje, Windows PowerShell reanuda la
ejecucin de la funcin. Observe que la funcin funcin1 se
complet.
Compare esto con el ejemplo siguiente, que tiene el mismo error
y la misma instruccin Trap. En este ejemplo, la instruccin
Trap se produce fuera de la funcin:
function funcin2 {
CadenaSinSentido
"funcin2 completada"
}
trap { "Un error: " }
. . .
funcin2

Ms adelante en el script, la ejecucin de la funcin funcin2


produce el resultado siguiente:
Un error:
El trmino 'CadenaSinSentido' no se reconoce como nombre de
un cmdlet, funcin, archivo de script o programa
ejecutable. Compruebe si escribi correctamente el nombre
o, si incluy una ruta de acceso, compruebe que dicha ruta
es correcta e intntelo de nuevo.
En C:\PS>TestScript2.ps1:4 Carcter:19
+ CadenaSinSentido <<<<
En este ejemplo, no se ejecut el comando "funcin2
completada". Aunque ambos errores de terminacin se producen
dentro de una funcin, si la instruccin Trap est fuera de la
funcin, Windows PowerShell no vuelve a ella despus de
ejecutarse la instruccin Trap.
Utilizar las palabras clave Break y Continue
Puede utilizar las palabras clave Break y Continue en una
instruccin Trap para determinar si un script o comando
contina ejecutndose despus de un error de terminacin.
Si incluye una instruccin Break en una lista de instrucciones
Trap, Windows PowerShell detiene la funcin o script. La
funcin de ejemplo siguiente utiliza la palabra clave Break en
una instruccin Trap:
C:\PS> function break_example {
trap {"Error interceptado"; break;}
1/$null
"Funcin completada."
}
C:\PS> break_example
Error interceptado
Intento de dividir por cero.
En lnea:4 Carcter:7
Como la instruccin Trap incluye la palabra clave Break, la
funcin no contina ejecutndose y la lnea " Funcin
completada" no se ejecuta.
Si incluye una instruccin Continue en una instruccin Trap,
Windows PowerShell se reanudar despus de la instruccin que
produjo el error, tal como sucedera sin Break o Continue. Sin
embargo, con la palabra clave Continue, Windows PowerShell no
escribe un error en la secuencia de error.
La funcin de ejemplo siguiente utiliza la palabra clave
Continue en una instruccin Trap:

C:\PS> function continue_example {


trap {"Error interceptado"; continue;} 1/$null
"Funcin completada."}
C:\PS> continue_example
Error interceptado
Funcin completada.
La funcin se reanuda una vez interceptado el error, y se
ejecuta la instruccin "Funcin completada". No se escribe
ningn error en la secuencia de error.
VEA TAMBIN
about_Break
about_Continue
about_Throw
about_Try_Catch_Finally
about_Scopes
about_Try_Catch_Finally

Вам также может понравиться