Je veux continuer à demander à l'utilisateur de saisir le nom du fichier si l'entrée saisie est incorrecte. J'ai testé le programme avec une entrée incorrecte (nom de fichier mal orthographié) mais au lieu de demander à l'utilisateur de réessayer, un message d'erreur est demandé et le programme se termine. Le code infructueux (partie de if) est ci-dessous. Quelqu'un peut-il m'aider à détecter ce qui ne va pas?

import nltk
from nltk.tokenize import word_tokenize
import re
import os
import sys




def main():
    while True:
        try:

            file_to_open =  input("insert the file you would like to use with its extension: ")

        except FileNotFoundError:

            print("File not found.Better try again")
            continue
        else:
            break


    with open(file_to_open) as f:
        words = word_tokenize(f.read().lower())

    with open ('Fr-dictionary2.txt') as fr:
        dic = word_tokenize(fr.read().lower())

        l=[ ]
        errors=[ ]
        for n,word in enumerate (words):
            l.append(word)
            if word == "*":
                exp = words[n-1] + words[n+1]
                print("\nconcatenation trials:", exp)
                if exp in dic:
                    l.append(exp)
                    l.append("$")
                    errors.append(words[n-1])
                    errors.append(words[n+1])
                else:
                    continue
2
Natalia Resende 17 mars 2019 à 22:13

2 réponses

Meilleure réponse

Le problème est que vous "protégez" la boucle while où le nom est simplement demandé. Vous pouvez également mettre la lecture à l'intérieur de try / except pour gérer le problème:

while True:
   try:
       file_to_open =  input("insert the file you would like to use with its extension: ")
       with open(file_to_open) as f:
           words = word_tokenize(f.read().lower())
       break
   except FileNotFoundError:
       print("File not found.Better try again")
0
6502 17 mars 2019 à 19:48

Il est possible de créer un objet Path même si le chemin lui-même n'existe pas dans votre système de fichiers. À un moment donné, vous devez demander à l'objet Path si le chemin à l'intérieur de celui-ci existe dans le système de fichiers, avant de quitter la boucle while. Vous n'aurez pas besoin du bloc try / except pour le faire comme ceci:

while True:
    p = Path(input("please input the path: "))
    if p.exists():
        break
    print("path does not exist, try again")
1
jfaccioni 17 mars 2019 à 19:21