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???
4 Réponses :
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
Pour élaborer, le problème identifié par Oregontrail est que votre renvoie 0 code> est en retrait au même niveau que votre
si code> instruction. Ceci met le code> Retour > en dehors du
si code>, la fonction renvoie donc
0 code>, 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") code>. Toutefois, lorsque j'ai utilisé un bloc
enfin code> 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 code>. Je ne pouvais fermer que le fichier avec succès avec un bloc
el / code> bloquer et non un
enfin code> bloquer - i utilisé
else: f.close () code>.
Ah, bon point, essayez .. d'autre est la voie à suivre ici pour une exécution résiliente
Ceci est probablement parce que vous souhaitez ouvrir le fichier en mode lecture. Remplacez le "U" par "R". P>
Bien sûr, vous pouvez utiliser OS.Path.Fath ('FilePath') code> aussi. p>
Je pense que os.path () code> 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. P>
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.
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') code>. 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. p>
Spécifiez ce que vous entendez par "ne fonctionne pas".