在赋值之前引用局部变量'CompletelyUniqueName'

时间:2013-10-29 12:48:45

标签: python variables

我已经查看了尽可能多的关于这个主题的答案,并且所有人都认为这是全球 - 地方冲突。我无法看到这在我的情况下会如何适用,但请解释一下。这是错误:

“赋值之前引用的局部变量'CompletelyUniqueName'”

这是代码,我从另一个脚本调用的函数:

def geopixsum(filename):
    # register all of the GDAL drivers
    gdal.AllRegister()
    # Check file type (in this case Geotiff)
    if filename.endswith('.tif'):
        # open the image
        try:
            inDs = gdal.Open(filename)
        except:
          print 'Could not open ',file,'\n'
        # get image size
        rows = inDs.RasterYSize
        cols = inDs.RasterXSize
        # read band 1 into data
        band1 = inDs.GetRasterBand(1)
        data = band1.ReadAsArray(0,0,cols,rows)
        # get nodata value
        nandat = band1.GetNoDataValue()
        sumvals = data[np.where(np.logical_not(data == nandat))]
        CompletelyUniqueName = sumvals.sum()
        print 'sum = ',CompletelyUniqueName
    inDs = None
    return CompletelyUniqueName

这段代码不是一个函数,而是一个脚本本身。再一次,我知道这会让它看起来像是一个全球性的本地问题,但是考虑到我已经指定变量的名称,我认为我已经足够长度以避免冲突。

2 个答案:

答案 0 :(得分:1)

您应该为CompletelyUniqueName定义默认值(例如filename.endswith('.tif') == False

def geopixsum(filename):
    CompletelyUniqueName = 0 
    if filename.endswith('.tif'):
        ...
        CompletelyUniqueName = sumvals.sum()
    return CompletelyUniqueName

或返回if语句

def geopixsum(filename):
    if filename.endswith('.tif'):
        ...
        CompletelyUniqueName = sumvals.sum()
        return CompletelyUniqueName

答案 1 :(得分:0)

最简单的解决方法:

def geopixsum(filename):
    CompletelyUniqueName = 0    # or None, or anything you want to return 
                                # if the file is not a tif
    # register all of the GDAL drivers
    gdal.AllRegister()
    # Check file type (in this case Geotiff)
    if filename.endswith('.tif'):
        # open the image
        try:
            inDs = gdal.Open(filename)
        except:
          print 'Could not open ',file,'\n'
        # get image size
        rows = inDs.RasterYSize
        cols = inDs.RasterXSize
        # read band 1 into data
        band1 = inDs.GetRasterBand(1)
        data = band1.ReadAsArray(0,0,cols,rows)
        # get nodata value
        nandat = band1.GetNoDataValue()
        sumvals = data[np.where(np.logical_not(data == nandat))]
        CompletelyUniqueName = sumvals.sum()
        print 'sum = ',CompletelyUniqueName
    inDs = None
    return CompletelyUniqueName