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
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
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
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.