尽管赋值前已引用变量,但赋值错误之前已引用该变量

时间:2020-02-12 20:08:20

标签: python function operating-system text-files

这很可能是我的错误,这是由于缺乏编码技巧,但是我遇到了以前从未有过的事情,那就是在使用函数并将它们引用其他函数时,变量可以是弄糊涂并产生错误。我需要有人帮助分解正在发生的事情。请帮助并提前谢谢您

import os

def main():
  if os.path.exists("Text.txt")==True:
    with open("Text.txt", "r") as f:
      li=[]
      for lines in f:
        li.append(eval(lines))
    for i in range(0, len(li)):
      if i == 0:
        a = li[i]
      elif i == 1:
        b = li[i]
      elif i == 2:
        c = li[i]
      elif i == 3:
        d = li[i]
      else:
        pass
  else:
    open("Text.txt", "w").close
    a=[1]
    b=[2]
    c=[3]
    d=[4]
  menu(a, b, c, d)
def menu(a, b, c, d):
  print(a, b, c, d)

main()

运行代码时出现错误,提示: 追溯(最近一次通话): main()中的文件“ main.py”第30行,main()文件中的“ main.py”文件第26行,main() 菜单(a,b,c,d) UnboundLocalError:赋值之前引用了本地变量'c'

3 个答案:

答案 0 :(得分:1)

    import os


def main():
    a, b, c, d = None,None,None, None # Use None or any other data type you are using
    if os.path.exists("Text.txt"):
        with open("Text.txt", "r") as f:
            li = []
            for lines in f:
                li.append(eval(lines))

        for i in range(0, len(li)):
            if i == 0:
                a = li[i]
            elif i == 1:
                b = li[i]
            elif i == 2:
                c = li[i]
            elif i == 3:
                d = li[i]
            else:
                pass
    else:
        open("Text.txt", "w").close
        a = [1]
        b = [2]
        c = [3]
        d = [4]
    menu(a, b, c, d)


def menu(a, b, c, d):
    print(a, b, c, d)

main()

在之前定义a,b,c和d,并应解决此问题。

答案 1 :(得分:1)

变量c并非总是在您的代码中定义。

例如使用以下内容进行检查:

def main():
  c=None
  ...
  if ...
  ...

答案 2 :(得分:1)

在“ else”块中,您以写模式打开“ Text.txt”,但是没有任何保存。因此,如果您尝试再次执行该脚本,它将进入“ if”块,打开文件并且什么也没读。例如,代码未进入“ for”循环,因此,该变量无法实例化,从而引发错误。您是说错误与“ c”变量有关,这可能是由于您在文本文件中写了一些东西但少于3行。

当我在文本文件中写两行时,我尝试了您的代码并获得了它:

    ---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
<ipython-input-41-275a763cfa3b> in <module>()
     28     print(a, b, c, d)
     29 
---> 30 main()

<ipython-input-41-275a763cfa3b> in main()
     24         c=[3]
     25         d=[4]
---> 26     menu(a, b, c, d)
     27 def menu(a, b, c, d):
     28     print(a, b, c, d)

UnboundLocalError: local variable 'c' referenced before assignment