14 votes

Python try/except ne fonctionne pas

J'essaie d'obtenir le try/except Le relevé fonctionne mais il y a des problèmes. Ce code prend un fichier txt et copie le fichier qui se trouve à l'emplacement de la ligne 0 à l'emplacement de la ligne 1. Il fonctionne cependant si je change l'un des chemins pour un autre non valide, il génère une erreur. ftplib.error_perm Cependant, la commande except n'est pas prise en compte et tout s'arrête. Que dois-je faire de mal ? Python 2.4

import csv
import operator
import sys
import os
import shutil
import logging
import ftplib
import tldftp

def docopy(filename):
        ftp = tldftp.dev()
        inf = csv.reader(open(filename,'r'))
        sortedlist = sorted(inf, key=operator.itemgetter(2), reverse=True)
        for row in sortedlist:
                src = row[0]
                dst = row[1]
                tldftp.textXfer(ftp, "RETR " + src, dst)

def hmm(haha):
    result = docopy(haha);
    try:
        it = iter(result)
    except ftplib.error_perm:
        print "Error Getting File" 

if __name__ == "__main__":
        c = sys.argv[1]
        if (c == ''):
                raise Exception, "missing first parameter - row"
        hmm(c)

11voto

user57318 Points 85

Le site except n'attrapera que les exceptions qui sont raise d à l'intérieur de leur try bloc. Essayez de mettre le docopy dans l'appel de la fonction try également :

def hmm(haha):
    try:
        result = docopy(haha)
        it = iter(result)
    except ftplib.error_perm:
        print "Error Getting File"

4voto

mgilson Points 92954

Le point du code qui soulève l'erreur doit se trouver à l'intérieur de l'objet try bloc. Dans ce cas, il est probable que l'erreur soit soulevée à l'intérieur du bloc docopy mais qui n'est pas incluse dans une fonction try bloc.

Notez que docopy devuelve None . En tant que tel, vous soulèverez une exception lorsque vous essayerez de faire un iter de None -- mais ce ne sera pas un ftplib.error_perm exception, ce sera une TypeError

1voto

renelhs Points 27

Si vous n'êtes pas sûr de l'exception qui se produira, utilisez le code ci-dessous, car si vous spécifiez par exemple : except StandardError : et que ce n'est pas cette erreur, l'exception ne sera pas traitée.

try:
    # some code
except Exception: # Or only except:
   print "Error" # Python 3: print("Error")

0voto

Matt Heffernan Points 1

Je sais que l'OP est ancienne, mais pour les gens qui cherchent désespérément des réponses à cette question. J'ai eu un problème similaire, selon votre IDE, si vous avez un point d'arrêt sur l'une des lignes avec des exceptions spécifiques, etc, cela peut entrer en conflit et empêcher l'exécution des try/except.

0voto

林果皞 Points 4216

J'ai remarqué que l'exception globale peut ne pas fonctionner, par exemple , Ctrl+C quand epub.py module performant urllib3 déclenchement de connexion KeyboardInterrupt mais je ne peux pas l'attraper dans le fil principal, la solution de contournement est de mettre mon code de nettoyage à l'intérieur de finally par exemple :

try:
    main()
except Exception as e:
    clean_up_stuff()  #this one never called if keyboard interrupt in module urllib3 thread
finally: #but this work
    clean_up_stuff()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X