recherche
Maisondéveloppement back-endTutoriel PythonDemandez pardon, pas la permission : quand ce style de programmation est-il approprié ?

Ask Forgiveness, Not Permission: When Is This Programming Style Appropriate?

"Demander le pardon et non la permission" en programmation

L'expression "demander pardon et non la permission" est souvent utilisée pour décrire un style de programmation qui favorise la simplicité et la robustesse plutôt que l'exactitude. Ce style est basé sur l'idée qu'il est préférable de détecter les exceptions et de les gérer avec élégance plutôt que d'essayer d'anticiper chaque échec possible et d'écrire du code pour l'empêcher.

Demander la permission ou demander pardon.

Dans le style "demander la permission", le code est écrit de manière à vérifier les conditions susceptibles de provoquer une exception avant d'effectuer toute action pouvant entraîner une erreur. exception. Par exemple :

if os.path.exists(filename):
    with open(filename) as f:
        data = f.read()
else:
    raise FileNotFoundError(f"File {filename} not found.")

Dans le style "demander pardon", le code est écrit pour simplement essayer d'effectuer l'action et détecter toutes les exceptions qui peuvent survenir :

try:
    with open(filename) as f:
        data = f.read()
except FileNotFoundError:
    print(f"File {filename} not found.")

Pourquoi « Demander pardon » est préféré

Il y a deux raisons principales pour lesquelles le style « demander pardon » est généralement préféré au style « demander pardon » Style "demander la permission":

1. Problèmes de concurrence :

Dans un environnement concurrent, tel qu'un programme multithread ou un programme qui interagit avec des ressources externes, l'état du système peut changer entre le moment où une vérification d'autorisation est effectuée et le moment où lorsque l'action est réalisée. Cela peut conduire à des résultats incorrects ou à des exceptions inutilement levées.

2. Vérifications d'autorisation trop restrictives :

Les vérifications d'autorisation peuvent être trop restrictives, empêchant le code d'effectuer des actions réellement possibles. Par exemple, la vérification de l'existence d'un fichier avant de l'ouvrir peut échouer si le fichier est créé après la vérification mais avant l'opération d'ouverture.

Quand utiliser « Demander pardon »

Le style « demander pardon » est approprié lorsque :

  • L'opération est susceptible d'échouer de manière prévisible et récupérable. façons.
  • Le coût de la vérification de l'autorisation est élevé.
  • Le contrôle de l'autorisation peut changer entre l'heure du contrôle et l'heure de l'opération.

Exemple

L'exemple fourni dans la question démontre une utilisation appropriée du style « demander pardon ». La vérification de la présence de l'attribut bar avant d'y accéder peut échouer si l'attribut est défini ultérieurement. Au lieu de cela, le code doit simplement essayer d'accéder à l'attribut et intercepter toute exception AttributeError qui peut survenir.

Il est important de noter que le style « demander pardon » ne signifie pas que les codeurs doivent être négligents ou écrire du code qui est sujette à des exceptions. Cela suggère plutôt qu'il est préférable de gérer les exceptions avec élégance plutôt que d'essayer d'anticiper chaque échec possible.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Comment coupez-vous une liste de python?Comment coupez-vous une liste de python?May 02, 2025 am 12:14 AM

SlitingyPapyThonListIsDoneUsingTheSyntaxList [Démarrage: arrêt: étape] .He'showitworks: 1) startisheindexofthefirStelementoinclude.2) stopisTheIndexoftheFirstelementsoexclude.3) StepistheincrementBetweenselans.it'susefulfactingPortationSoListShsandCanusegeg

Quelles sont les opérations communes qui peuvent être effectuées sur des tableaux Numpy?Quelles sont les opérations communes qui peuvent être effectuées sur des tableaux Numpy?May 02, 2025 am 12:09 AM

NumpyAllowsForvariousOperations ONARRAYS: 1) BasicarithmeticLikeaddition, Soustraction, Multiplication, anddivision; 2) AdvancedOperationSuchasmatrixMultiplication; 3) Element-Wiseoperations withoutExplicitloop

Comment les tableaux sont-ils utilisés dans l'analyse des données avec Python?Comment les tableaux sont-ils utilisés dans l'analyse des données avec Python?May 02, 2025 am 12:09 AM

ArraySinpython, en particulier ThroughNumpyandPandas, aressentialfordataanalysis, offingspeeedAfficiency.1) numpyarrayablefficienthandlingoflargedatasetsandComplexOperationsLikEMoVingAverages.2)

Comment l'empreinte mémoire d'une liste se compare-t-elle à l'empreinte de la mémoire d'un tableau dans Python?Comment l'empreinte mémoire d'une liste se compare-t-elle à l'empreinte de la mémoire d'un tableau dans Python?May 02, 2025 am 12:08 AM

ListsandNumpyArraysInpythonHaveDidifferentMemoryfootprints: listsaRemoreFlexibles Butlessmemory économe, tandis que la liste de résensés est-ce qui

Comment gérez-vous les configurations spécifiques à l'environnement lors du déploiement de scripts Python exécutables?Comment gérez-vous les configurations spécifiques à l'environnement lors du déploiement de scripts Python exécutables?May 02, 2025 am 12:07 AM

ToenSurepythonscriptsBeHavecorrectlyAcrossDevelopment, mise en scène et production, catégories de type: 1) EnvironmentVariblesForsImplesettings, 2) ConfigurationFilesForComplexsetups et3) dynamicloadingforadaptability.eachMethodoffersNebeneFitsAndreCeresca

Comment trancher un tableau Python?Comment trancher un tableau Python?May 01, 2025 am 12:18 AM

La syntaxe de base pour le découpage de la liste Python est la liste [Démarrage: arrêt: étape]. 1.Start est le premier index d'élément inclus, 2.STOP est le premier indice d'élément exclu et 3.StEP détermine la taille de l'étape entre les éléments. Les tranches sont non seulement utilisées pour extraire les données, mais aussi pour modifier et inverser les listes.

Dans quelles circonstances les listes pourraient-elles mieux fonctionner que les tableaux?Dans quelles circonstances les listes pourraient-elles mieux fonctionner que les tableaux?May 01, 2025 am 12:06 AM

ListesoutPerformarRaySin: 1) dynamicingizingandfrequentinSertions / Deletions, 2) StoringheteroGeneousData, and3) MemoryEfficiencyForsparsedata, butmayhaveslightperformanceCostSincertorations.

Comment pouvez-vous convertir un tableau Python en une liste Python?Comment pouvez-vous convertir un tableau Python en une liste Python?May 01, 2025 am 12:05 AM

Toconvertapythonarraytoalist, usethelist () Constructororageneratorexpression.1) ImportTheArrayModuleandCreateArray.2) Uselist (Arr) ou [Xforxinarr] à Convertittoalist, considérant la performance et le domaine de l'émie-efficacité pour les étages.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Dreamweaver Mac

Dreamweaver Mac

Outils de développement Web visuel