web-dev-qa-db-ja.com

変数のスコープと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

ここでは、ディレクトリ(およびサブ)内のすべてのファイルのサイズを印刷しようとしています。しかし、imim.size。しかし、elseまたはfinallyブロックを使用せずに他にどのようにそれを行うのですか?.

次のエラーが表示されます。

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

「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

これでループに入ったので、「継続」ステートメントを使用することもできます。

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

ファイルを画像として開くことができず、有効な画像のみを操作する場合は、次の反復に移動する continue ステートメントをexceptブロックに含めますあなたのforループの。

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)

また、; Python。

2
Burhan Khalid