【问题标题】:Python NameError: name is not defined (variable names already defined but I get error)Python NameError: name is not defined(变量名已经定义但我得到错误)
【发布时间】:2022-11-18 21:44:02
【问题描述】:

我正在尝试运行以下代码。我收到错误 NameError: name 'XXXXX' is not defined。

if __name__ == '__main__':
    
    landsat_dir = "C:/Users/mbariz/Documents/Landsat"
    MOD09_dir = "C:/Users/mbariz/Documents/MOD09"


def search_landsat_name(path):
    """to get the landsat list file name"""
    output_list =[]
    pt=os.listdir(path)
    for item in pt:
        if str.find(item,'B3.TIF') != -1: #satisfied conditions
            output_list.append(item[:-6])

    return np.unique(output_list) 

    for item in landsat_file_list:
        print(item)
        LD_BQA_name = item + "BQA.TIF"
        LD_B1_name = item + "B1.TIF"
        LD_B2_name = item + "B2.TIF"
        LD_B3_name = item + "B3.TIF"
        LD_B4_name = item + "B4.TIF"
        LD_B5_name = item + "B5.TIF"
        LD_B6_name = item + "B6.TIF"
        LD_B7_name = item + "B7.TIF"

打印(LD_B3_名称)


NameError Traceback(最后一次调用) [8] 中的单元格,第 1 行 ----> 1 打印(LD_B3_name)

NameError:未定义名称“LD_B3_name”

请有任何建议。

【问题讨论】:

  • 您认为导致定义 LD_B3_name 之类的步骤的顺序是什么?它只在一个似乎从未被调用过的函数内部赋值,赋值永远不会发生,因为它遵循 return 语句,并且它是一个局部变量,所以它不存在于函数之外。
  • 如果代码的缩进与您发布的代码完全相同,则 LD_B3_name 未在您尝试打印它的命名空间中定义,这与错误提示的完全一样。 LD_B3_name 仅对函数 search_landsat_name 是本地的。
  • 而不是像LD_B3_name 那样一大堆名称相似的变量——为什么不用一个字典呢?您可以从函数中返回它,然后将所有名称提供给调用代码。

标签: python arrays python-3.x list


【解决方案1】:

LD_B3_name 在您的函数search_landsat_name 中本地定义。 这意味着该变量仅存在于您的函数内部。

如果你想访问search_landsat_name之外的变量,你可以简单地返回变量:

def search_landsat_name(path):
    # some code
    return LD_B3_name

LD_B3_name = search_landsat_name(path)
print(LD_B3_name)

但请记住,LD_B3_name = search_landsat_name(path) 创建了一个自变量。如果您更改该值,它不会影响函数内部的 LD_B3_name

查看 globallocal 变量以帮助您更多地了解这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-07
    • 2022-11-27
    • 1970-01-01
    相关资源
    最近更新 更多