Changer votre programme flux un peu de clarté et essayer de sauver les gestionnaires d'exceptions pour quand votre programme a échoué de manière significative et doit avertir l'utilisateur ou modifier complètement le déroulement du programme (conditions exceptionnelles). Les exceptions existent comme une sorte de protocole pour quand le système rencontre un problème il ne peut pas fixer.
Si vous devez sauter d'un avion, la dernière chose que vous voulez savoir est qu'il n'y a pas de parachutes disponibles. Utilisez donc os.path.exists()
pour vous indiquer si un chemin est valide lorsque vous gérez une exception. La valeur par défaut la plus sûre est le répertoire courant, accessible en utilisant .
comme chemin. Mais si ce n'est pas le cas, vous devriez pouvoir supposer que le répertoire utilisateur existe déjà au cas où votre code aurait besoin de planter et de graver. mkdir
avant de devoir gérer les exceptions, pas après.
Assurez-vous également de mettre en retrait correctement en python. L'espacement peut aussi aider à attraper les erreurs, alors n'ayez pas peur d'utiliser un saut de ligne quand cela facilite la lecture du code. Votre try
clause nécessite un niveau d'indentation:
try:
# simplify the if statement to stop repeating yourself
if not os.path.exists(project_dir):
os.makedirs(project_dir)
file_location = project_dir
except OSError as exc:
if exc.errno != errno.EEXIST:
raise # reraise the current exception
if os.path.exists(user_dir):
file_location = user_dir
else: # FUBAR. Sound sirens immediately and try everything to keep the file somewhere in memory before failing.
print("[ERROR] {} was inaccessible.\nWhile attempting to recover, {} did not exist so files could not be backed up."
.format(project_dir, user_dir))
raise
L'échec d'un gestionnaire d'exception ne devrait jamais être autorisé à se produire. C'est un événement cataclysmique, et vous devriez vous attendre à ce que la seule option qui reste à se briser sur le bureau. Une exception peut être capturée et récupérée. Deux ou trois exceptions imbriquées signifient que votre ordinateur a peut-être acquis de la sensibilité et a commencé à renverser ses chaînes numériques (ou que vous devez réfléchir sérieusement à la raison pour laquelle vous gérez des exceptions).
Veuillez poster votre code pour refléter les indentations que vous utilisez. – patrick
Bienvenue dans StackOverflow. Veuillez lire et suivre les consignes de publication dans la documentation d'aide. [Exemple minimal, complet, vérifiable] (http://stackoverflow.com/help/mcve) s'applique ici. Nous ne pouvons pas vous aider efficacement tant que vous n'afficherez pas votre code MCVE et que vous ne décrivez pas précisément le problème. Nous devrions pouvoir coller votre code posté dans un fichier texte et reproduire le problème que vous avez décrit. – Prune
merci, Patrick ma tentative de faire ce post sucé mais va le descendre! –