【问题标题】:NameError: name is not defined; a variable defined if a conditon is metNameError:名称未定义;满足条件时定义的变量
【发布时间】:2019-05-08 04:22:58
【问题描述】:

我的代码结构如下:

def collect_data(text):
    for line in text:
        key, match = parse_lines(line) #here I am parsing using a dict and regular expressions

        if key == something_1:
            var1 = match.group(1)
            list1.append(var1)

        elif key == something_2:
            var2 = match.group(2)
            list2.append(var2)

        elif key == something_3:
            func()

def func():
    for element in elements :
        if element == element1:
            variation = float(var1)
        elif element == element2:
            variation = float(var2)

         #here I append the variable variation to a list depending on the element name e.g. somelist.append(variation)
collect_data(text)

我正在尝试解析类似于此处link 中给出的解决方案的行。 在两个第一个条件中,我将 var1 或 var2 附加到某些列表中,它可以正常工作。问题在于 func()。我正进入(状态: NameError: name 'var1' is not defined

在我正在解析的文本中,collect_data(text) 中的前两个条件通常出现在第三个条件之前,但我认为这不是我的问题的本质。我只是不知道如何让 Python 看到一旦满足条件,就会(将)定义 var1 和 var2。我希望解释足够清楚。也许使用类将是一个解决方案?有人有什么建议吗?

【问题讨论】:

    标签: python python-3.x error-handling


    【解决方案1】:

    你有两个问题:

    1. var1var 2 是局部变量,所以你只能在你的collect_data 函数中访问它们,你不能在func() 中访问它们。您可以使用全局变量,也可以将它们作为参数传递(在您的情况下是最佳解决方案),
    2. 如果您希望在最后一个elif 中可以访问它们,则必须在您的if 语句之前创建var 1var2

    试试这样的:

    def collect_data(text):
        for line in text:
            key, match = parse_lines(line) #here I am parsing using a dict and regular expressions
    
            var1 = match.group(1)
            var2 = match.group(2)
    
            if key == something_1:
                list1.append(var1)
    
            elif key == something_2:
                list2.append(var2)
    
            elif key == something_3:
                func(var1, var2)
    
    def func(var1, var2):
        for element in elements :
            if element == element1:
                variation = float(var1)
            elif element == element2:
                variation = float(var2)
    
             #here I append the variable variation to a list depending on the element name e.g. somelist.append(variation)
    collect_data(text)
    

    【讨论】:

      【解决方案2】:

      在 Python 中,函数基本上只知道函数内或主代码中指定的变量。它不知道其他函数中发生的任何事情,除非您将它们相互解析。

      def collect_data(text):
          for line in text:
              key, match = parse_lines(line) #here I am parsing using a dict and regular expressions
      
              if key == something_1:
                  var1 = match.group(1)
                  list1.append(var1)
      
              elif key == something_2:
                  var2 = match.group(2)
                  list2.append(var2)
      
              elif key == something_3:
                  list3.append(func(a=var1, b=var2))
      
      def func(a, b):
          for element in elements :
              if element == element1:
                  variation = float(a)
              elif element == element2:
                  variation = float(b)
          return variation
      
      
      # here I append the variable variation to a list depending on the element name e.g. somelist.append(variation)
      collect_data(text)
      

      【讨论】:

        【解决方案3】:

        尝试将var1var2 参数传递给func()。像这样:

        def func(var1, var2):
            # your code
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-13
          • 2021-12-12
          • 2018-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多