2017-05-18 1 views
-3

J'ai quelques problèmes pour faire fonctionner mon erreur de traitement J'ai épuisé ma recherche et creuser dans quelqu'un peut m'aider un peu. Fondamentalement, j'essaie de vérifier si le chemin existe s'il définit set_location et passe à else si le répertoire n'a pas accès à create folder créer le répertoire dans les utilisateurs My document.Python Issue avec des exceptions

tous les travaux mais si j'essaye de forcer l'erreur pour employer mes documents, cependant, j'obtiens des erreurs ainsi je ne suis pas 100% sûr que mon except sera exécuté.

try: 
    if os.path.exists(project_dir): 
     file_location = (project_dir) 
    else: 
     os.makedirs(project_dir) 
     file_location = (project_dir) 
except OSError as exc: 
    if exc.errno != errno.EEXIST: 
     raise 
    pass 
    os.makedirs(user_dir) 
    file_location = (user_dir) 
+1

Veuillez poster votre code pour refléter les indentations que vous utilisez. – patrick

+0

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

+0

merci, Patrick ma tentative de faire ce post sucé mais va le descendre! –

Répondre

0

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).

+0

Merci beaucoup pour votre aide. –