переменная, на которую ссылаются до ошибки присваивания, несмотря на то, что на нее ссылаются перед присваиванием

Скорее всего, это ошибка с моей стороны из-за недостатка навыков при кодировании, но я столкнулся с чем-то, чего у меня никогда не было, и это было при использовании функций и обращении их к другим функциям, переменные могут быть запутаны и выдать ошибку. Мне нужен кто-то, кто поможет разобраться в происходящем. Пожалуйста, помогите и спасибо заранее

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

когда я запускаю код, появляется сообщение: Traceback (последний вызов был последним): файл "main.py", строка 30, в main () Файл "main.py", строка 26, в главном меню (a, b , c, d) UnboundLocalError: локальная переменная 'c', на которую ссылается перед присваиванием

Всего 3 ответа


переменная с не всегда определяется в вашем коде.

Проверьте, например, что-то вроде:

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

    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 перед этим и должны решить проблему.


В блоке «else» вы открываете «Text.txt» в режиме записи, но на нем ничего не экономится. Таким образом, если вы попытаетесь снова выполнить скрипт, он войдет в блок «если», откроет файл и ничего не прочитает. Например, код не входит в цикл 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

Есть идеи?

10000