变量的作用域和尝试在蟒蛇抓(Variable scope and Try Catch in pyth

2019-06-25 17:57发布

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 。 但怎么回事做呢,而不使用elsefinally块。

示出了以下错误:

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

Answer 1:

什么是错的“其他”条款?

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


Answer 2:

如果您无法打开文件作为图像,只希望在有效图像工作,那么包括continue语句您的拦网除外,将带你到你的下一个迭代for循环。

try:
    im = Image.open(os.path.join(dirname, filename))
except IOError:
    print 'error opening file :: ' + os.path.join(dirname, filename)
    continue


Answer 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)

此外,没有; 在Python。



文章来源: Variable scope and Try Catch in python