web-dev-qa-db-fra.com

Portée variable et essayez de prendre en compte python

import Image
import os
for dirname, dirs, files in os.walk("."):
    for filename in files:
        try:
            im = Image.open(os.path.join(dirname,filename))
        except IOError:
            print "error opening file :: "  + os.path.join(dirname,filename)
        print im.size

Ici, j'essaie d'imprimer la taille de tous les fichiers d'un répertoire (et de sous). Mais je sais im est en dehors de la portée quand dans la ligne im.size. Mais comment puis-je le faire sans utiliser else ou finally blocs.

L'erreur suivante est affichée:

Traceback (most recent call last):
  File "batch.py", line 13, in <module>
    print im.size
NameError: name 'im' is not defined
23
shahalpk

Quel est le problème avec la clause "autre"?

for filename in files:
    try:
        im = Image.open(os.path.join(dirname,filename))
    except IOError, e:
        print "error opening file :: %s : %s" % (os.path.join(dirname,filename), e)
    else:
        print im.size

Maintenant, comme vous êtes dans une boucle, vous pouvez également utiliser une déclaration "Continuer":

for filename in files:
    try:
        im = Image.open(os.path.join(dirname,filename))
    except IOError, e:
        print "error opening file :: %s : %s" % (os.path.join(dirname,filename), e)
        continue

    print im.size
22

Si vous ne pouvez pas ouvrir le fichier sous forme d'image et que vous souhaitez uniquement travailler sur des images valides, incluez une instruction A continue dans votre blocage qui vous mènera à la prochaine itération de votre for boucle.

try:
    im = Image.open(os.path.join(dirname, filename))
except IOError:
    print 'error opening file :: ' + os.path.join(dirname, filename)
    continue
4
Christian Witts
import Image
import os
for dirname,dirs,files in os.walk("."):
    for filename in files:
        try:
            im = Image.open(os.path.join(dirname,filename))
            print im.size
        except IOError:
            print "error opening file :: "  + os.path.join(dirname,filename)

Aussi non ; en python.

2
Burhan Khalid