C'è qualcosa sulla falsariga di Python 'pass' in javascript?javascript pass
voglio fare l'equivalente di javascript:
try:
# Something that throws exception
catch:
pass
C'è qualcosa sulla falsariga di Python 'pass' in javascript?javascript pass
voglio fare l'equivalente di javascript:
try:
# Something that throws exception
catch:
pass
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) {}
C'è, e qui è:
Proprio così, niente di niente:
try {
somethingThatThrowsAnException();
} catch (e) {
}
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!
Le parentesi graffe vuote non stanno facendo il trucco?A proposito, mangiare le eccezioni in silenzio è quasi sempre la cosa sbagliata da fare. –
[Try/Catch reference] (https://developer.mozilla.org/en/JavaScript/Reference/Statements/try...catch) – Jason
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 –