2012-05-23 12 views
30

¿Hay algo en la línea de Python 'pass' en javascript?javascript pass

Quiero hacer el equivalente de javascript:

try: 
    # Something that throws exception 
catch: 
    pass 
+5

Las llaves vacías no funcionan?Por cierto, comer silenciosamente excepciones es casi siempre lo incorrecto. –

+1

[Referencia de Try/Catch] (https://developer.mozilla.org/en/JavaScript/Reference/Statements/try...catch) – Jason

+0

Para el punto de Adam, tengo una nueva respuesta a esta vieja pregunta que se ajusta para Python manejo de errores matizados a continuación aquí: http://stackoverflow.com/a/28288015/541136 –

Respuesta

38

pass is a no-op in Python. que lo necesite para bloques vacíos porque

try: 
    # Something that throws exception 
catch: 

# continue other stuff 

is a syntax error. En JavaScript, puede usar un bloque catch vacío.

try { 
    // Something that throws exception 
} 
catch (e) {} 
31

hay, y aquí está:

 

Así es, nada en absoluto:

try { 
    somethingThatThrowsAnException(); 
} catch (e) { 
} 
3

Quiero hacer el equivalente Javascript de:

try: 
    # Something that throws exception 
catch: 
    pass 

Python no tiene try/catch. Tiene try/except. Por lo que reemplazar catch con except, tendríamos lo siguiente:

try { 
    //  throw any exception 
} catch(err) {} 

El bloque de código vacío después de la captura es equivalente a Python de pass.

Buenas Prácticas

Sin embargo, se podría interpretar esta pregunta un poco diferente. Supongamos que quiere adoptar la misma semántica que Python try/except block. El manejo de excepciones de Python es un poco más matizado, y le permite especificar qué errores atrapar.

De hecho, se considera una buena práctica capturar únicamente tipos de error específicos.

lo tanto una versión mejor práctica para Python sería, ya que sólo desea capturar las excepciones de que está preparado para manejar, y evitar errores de ocultación:

try: 
    raise TypeError 
except TypeError as err: 
    pass 

Usted debe probablemente subclase el tipo de error apropiado, estándar Javascript no tiene una jerarquía de excepciones muy rica. Elegí TypeError porque tiene la misma ortografía y semántica similar a la TypeError de Python.

Para seguir la misma semántica para esto en Javascript, primero tenemos have to catch all errors, por lo que necesitamos un flujo de control que se ajuste a eso. Entonces, debemos determinar si el error no es el tipo de error que queremos pass con una condición if. La falta de control de flujo es lo que silencia el TypeError. Y con este código, en teoría, todos los demás tipos de errores se suben a la superficie y ser fijos, o al menos ser identificados para el tratamiento de errores adicionales:

try {         // try: 
    throw TypeError()     //  raise ValueError 
} catch(err) {      // # this code block same behavior as 
    if (!(err instanceof TypeError)) { // except ValueError as err: 
    throw err       //  pass 
    } 
}      

Comentarios bienvenidos!

Cuestiones relacionadas