0
votes

Essayez sauf pendant avec l'entrée de l'utilisateur

ci-dessous est un échantillon de mon problème. J'ai un script qui tente d'accéder à un fichier Excel. Cela fonctionne bien, mais si le fichier est actuellement ouvert, je recevrais une erreur de permission refusée. Je ferais généralement fermer le fichier et exécuter le script à nouveau, mais je souhaite pouvoir fermer le programme et simplement entrer une touche de frappe par exemple 'y', pour indiquer que le fichier est fermé et réessayer. Mon problème est maintenant lorsque je saisi une valeur, il continuerait toujours à essayer de courir et si elle échoue une seconde fois, il quitterait le script. Des idées?

input_yes = 'y'
answer = {}
try:
    finalSheet('my file.xlsx')
except:
    while answer != str(input_yes):
         answer = input('Please confirm that (my file.xlsx) is closed and enter y: ')
         finalSheet('my file.xlsx')
         continue


0 commentaires

3 Réponses :


0
votes

Je ne peux pas vraiment programmer en python, mais dans la plupart des langues, le bloc de traitement des exceptions n'est pas considéré comme faisant partie du bloc , sinon vous ne seriez pas en mesure de réthusion à partir de Ça.

Vous devez changer le code de sorte que tout est à l'intérieur d'une boucle. xxx

excuses pour toutes les erreurs de ce qui précède, mon python n'est pas génial. < / p>


1 commentaires

Ce n'est pas un problème, j'apprends aussi, le premier commentaire était exactement ce dont j'avais besoin, mais merci pour votre contribution.



0
votes
try:
    while True:
        try:
            finalSheet('my file.xlsx')
            print('Success')
            break
        except:
            if not input('Please confirm that (my file.xlsx) is closed and enter y: ') == str(input_yes):
                raise KeyboardInterrupt #or any other exception
except KeyboardInterrupt:
    print('Cancelled by user')
    return


You want to put the entire block inside a "try".
The loop will break if the operation succeeded, skipping the outer "except" block.If there is an exception (i.e. file is locked) and the user answers "y" then the loop continues.If the file is locked and the user answers !"y" then a new exception is raised, exiting the loop into the last "except" block.

1 commentaires

Je ne veux pas que l'utilisateur annule, je souhaite que le script reste allumé et attendez que le fichier soit fermé.



0
votes
input_yes = 'y'
while True:
    try:
        finalSheet('my file.xlsx')
        break #If reading the file succeeded, it will leave the outer loop
    except:
        while True:
            answer = input('Please confirm that (my file.xlsx) is closed and enter y: ')
            if answer == input_yes:
                break #If the answer is 'y', it will leave the inner loop, and try to read the file. Otherwise, it will continue to ask for readiness

3 commentaires

Je n'ai pas pu essayer, puisque le premier commentaire était exactement quand j'avais besoin, mais si quelqu'un avait vécu cela à l'avenir, j'espère qu'ils l'essaieraient.


@Sigmas dans la réponse que vous avez utilisée, si l'utilisateur appuie sur "Y ', il sera abandonné, tandis que dans mon code, il attendra que l'utilisateur appuie" Y ", ce que j'ai compris à la question. Mais si vous préférez réellement sa méthode, aucun problème.


J'ai essayé le vôtre, ça marche aussi bien. Je n'ai pas eu d'essayer d'essayer avant que @Yotamz Script fonctionne aussi bien. Je l'ai modifié un peu, mais les deux sont super. Jamais voulu dire que vous doublez!