2012-05-23 13 views
30

C'è qualcosa sulla falsariga di Python 'pass' in javascript?javascript pass

voglio fare l'equivalente di javascript:

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

Le parentesi graffe vuote non stanno facendo il trucco?A proposito, mangiare le eccezioni in silenzio è quasi sempre la cosa sbagliata da fare. –

+1

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

+0

Per il punto di Adam, ho una nuova risposta a questa vecchia domanda che si adatta a Python gestione degli errori sfumata qui sotto: http://stackoverflow.com/a/28288015/541136 –

risposta

38

pass is a no-op in Python. ne avete bisogno per blocchi vuoti perché

try: 
    # Something that throws exception 
catch: 

# continue other stuff 

is a syntax error. In JavaScript puoi semplicemente utilizzare un blocco vuoto catch.

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

C'è, e qui è:

 

Proprio così, niente di niente:

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

voglio fare l'equivalente javascript di:

try: 
    # Something that throws exception 
catch: 
    pass 

Python non ha try/catch. Ha provato/tranne. Quindi, sostituendo catch con except, avremmo questo:

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

Il blocco di codice vuota dopo la cattura è equivalente a Python di pass.

Best Practices

Tuttavia, si potrebbe interpretare questa domanda un po 'diverso. Supponiamo di voler adottare la stessa semantica di un try/except di Python. La gestione delle eccezioni di Python è leggermente più sfumata e ti consente di specificare quali errori catturare.

In effetti, è considerata una buona pratica rilevare solo tipi di errore specifici.

Quindi una versione best practice per Python sarebbe, dal momento che si desidera catturare solo le eccezioni si è pronti a gestire, e di evitare errori nascondigli:

try: 
    raise TypeError 
except TypeError as err: 
    pass 

Probabilmente si dovrebbe sottoclasse il tipo di errore del caso, standard di JavaScript non ha una gerarchia di eccezioni molto ricca. Ho scelto TypeError perché ha la stessa semantica ortografica e simile a TypeError di Python.

Per seguire la stessa semantica di questo in Javascript, per prima cosa viene effettuato il have to catch all errors, quindi è necessario un flusso di controllo adeguato per questo. Quindi abbiamo bisogno di determinare se l'errore non è il tipo di errore che vogliamo a pass con una condizione if. La mancanza di altro flusso di controllo è ciò che rende silenzioso lo TypeError. E con questo codice, in teoria, tutti gli altri tipi di errori dovrebbero bolla in superficie ed essere fissati, o almeno essere identificati per la gestione degli errori in più:

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 
    } 
}      

Commenti benvenuto!