7
votes

Fiche ouverte avec essayer et sauf python 2.7.1

def FileCheck(fn):       
       try:
           fn=open("TestFile.txt","U") 
       except IOError: 
           print "Error: File does not appear to exist."
       return 0 
I'm trying to make a function that checks to see if a file exists and if doesn't then it should print the error message and return 0 . Why isn't this working???

1 commentaires

Spécifiez ce que vous entendez par "ne fonctionne pas".


4 Réponses :


23
votes

Vous aurez besoin d'indenter le retour 0 si vous souhaitez revenir de l'intérieur, à l'exception du bloc. En outre, votre argument ne fait pas beaucoup de quoi que ce soit. Au lieu de l'attribuer le fichierHandle, je suppose que vous souhaitez que cette fonction puisse tester n'importe quel fichier? Sinon, vous n'avez pas besoin d'arguments.

def FileCheck(fn):
    try:
      open(fn, "r")
      return 1
    except IOError:
      print "Error: File does not appear to exist."
      return 0

result = FileCheck("testfile")
print result


5 commentaires

Pour élaborer, le problème identifié par Oregontrail est que votre renvoie 0 est en retrait au même niveau que votre si instruction. Ceci met le Retour en dehors du si , la fonction renvoie donc 0 , que cela ait eu une erreur ou non.


Comment puis-je appeler la fonction? Dois-je définir un fichier sur une variable? Si je faisais cela, cela allait simplement ouvrir le fichier. . .


J'ai ajouté des lignes pour éliminer l'exemple


Cela a bien fonctionné pour moi. J'ai utilisé f = ouvert (fn, "r") . Toutefois, lorsque j'ai utilisé un bloc enfin pour fermer un fichier qui n'existe pas, j'ai reçu le message d'erreur Unboundlocalerror: une variable locale 'F' référencée avant la mission . Je ne pouvais fermer que le fichier avec succès avec un bloc el / code> bloquer et non un enfin bloquer - i utilisé else: f.close () .


Ah, bon point, essayez .. d'autre est la voie à suivre ici pour une exécution résiliente



4
votes

Ceci est probablement parce que vous souhaitez ouvrir le fichier en mode lecture. Remplacez le "U" par "R".

Bien sûr, vous pouvez utiliser OS.Path.Fath ('FilePath') aussi.


0 commentaires

3
votes

Je pense que os.path () est meilleur si vous voulez simplement "vérifier" si un fichier existe depuis que vous n'avez pas besoin d'ouvrir le fichier. Quoi qu'il en soit, après avoir ouvert, c'est une meilleure pratique considérée pour fermer le fichier et les exemples ci-dessus n'incluait pas cela.


2 commentaires

J'aime ça mieux. Y a-t-il une version pour vérifier un répertoire aussi?


isfile est définitivement meilleur. Pour les fichiers unis, il devrait être inoffensif pour ouvrir des fichiers, mais il peut avoir des effets secondaires inattendus si, par exemple, c'est un tuyau nommé. De plus, lorsque vous quittez la portée, le fichier doit se fermer automatiquement.



-1
votes

Si vous voulez simplement vérifier si un fichier existe ou non, la bibliothèque de Python OS a des solutions pour cela, tels que OS.Path.Fath.File ('Testfile.txt') . La réponse à OregonTrails ne fonctionnerait pas comme vous auriez toujours besoin de fermer le fichier à la fin avec un blocage enfin, mais de le faire, vous devez stocker le pointeur de fichier dans une variable située à l'extérieur de l'essai et à l'exception du bloc qui défait l'objet de votre solution.


0 commentaires