web-dev-qa-db-fra.com

passe javascript

Y a-t-il quelque chose du genre python 'pass' en javascript?

Je veux faire l'équivalent javascript de:

try:
  # Something that throws exception
catch:
  pass
34
Intra

pass est un no-op en Python. Vous en avez besoin pour les blocs vides car

try:
    # Something that throws exception
catch:

# continue other stuff

est une erreur de syntaxe . En JavaScript, vous pouvez simplement utiliser un bloc catch vide.

try {
    // Something that throws exception
}
catch (e) {}
45
Matt Ball

Il y a, et le voici:

C'est vrai, rien du tout:

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

Je veux faire l'équivalent javascript de:

try:
  # Something that throws exception
catch:
  pass

Python n'a pas try/catch. Il a essayé/sauf. Donc, en remplaçant catch par except, nous aurions ceci:

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

Le bloc de code vide après la capture est équivalent à pass de Python.

Meilleures pratiques

Cependant, on pourrait interpréter cette question un peu différemment. Supposons que vous souhaitiez adopter la même sémantique qu'un bloc Python try/except. La gestion des exceptions de Python est un peu plus nuancée et vous permet de spécifier les erreurs à détecter.

En fait, il est considéré comme une meilleure pratique de ne capturer que des types d'erreur spécifiques.

Ainsi, une version de meilleure pratique pour Python serait, car vous voulez intercepter uniquement les exceptions que vous êtes prêt à gérer et éviter de masquer les bogues:

try:
    raise TypeError
except TypeError as err:
    pass

Vous devriez probablement sous-classer le type d'erreur approprié, Javascript standard n'a pas une hiérarchie d'exceptions très riche. J'ai choisi TypeError car il a la même orthographe et la même sémantique que TypeError de Python.

Pour suivre la même sémantique pour cela en Javascript, nous avons d'abord devons attraper toutes les erreurs , et nous avons donc besoin d'un flux de contrôle qui s'ajuste pour cela. Nous devons donc déterminer si l'erreur n'est pas le type d'erreur que nous voulons pass avec une condition if. L'absence d'autre flux de contrôle est ce qui fait taire le TypeError. Et avec ce code, en théorie, tous les autres types d'erreurs devraient remonter à la surface et être corrigés, ou du moins être identifiés pour une gestion supplémentaire des erreurs:

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

Commentaires bienvenus!

4
Aaron Hall