Область переменных и Try Catch в 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
Здесь я пытаюсь напечатать размер всех файлов в каталоге (и под). Но я знаю, что im
находится за пределами области действия, когда в строке im.size
. Но как же я это делаю без использования блоков else
или finally
.
Отображается следующая ошибка:
Traceback (most recent call last):
File "batch.py", line 13, in <module>
print im.size
NameError: name 'im' is not defined
Ответы
Ответ 1
Что не так с предложением else?
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
Теперь, когда вы находитесь в цикле, вы также можете использовать оператор continue:
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
Ответ 2
Если вы не можете открыть файл в качестве изображения и хотите работать только с действительными изображениями, включите continue
в вашем исключающем блоке, который перенесет вас на следующую итерацию цикла for
.
try:
im = Image.open(os.path.join(dirname, filename))
except IOError:
print 'error opening file :: ' + os.path.join(dirname, filename)
continue
Ответ 3
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)
Кроме того, no ;
в Python.