Запутанный UnboundLocalError в Python 3.8

#python-3.x #global-variables #local-variables

#python-3.x #глобальные переменные #локальные переменные

Вопрос:

Я только начинаю учиться программировать, поэтому надеюсь, что задаю этот вопрос правильно. Для практики я хотел создать программу, которая будет распечатывать классы, поскольку форма на самом деле не меняется. Он будет принимать входные данные, изменять их, а затем размещать их в правильном порядке.

У меня возникли проблемы с извлечением слов из списка и удалением пробелов, добавлением подчеркиваний и изменением значений. В функции выше следующего кода я получаю входные данные и помещаю их в глобальный список с именем required . Я перепутал с вводом global required , def modify(): но это ничего не меняет. Закомментированные строки — это те, которые продолжают помечать ошибку «UnboundLocalError: локальная переменная ‘i’, на которую ссылаются перед назначением». Я хочу заменить исходное слово и добавить измененное слово. Я безуспешно пытался перемещать отступ.

Для меня это не имеет смысла, поскольку ранее в коде у него нет проблем с печатью «i», а позже в коде у него тоже нет проблем с выполнением того, что я ищу. Почему у него проблемы с «i» в промежуточном разделе, где он работает просто отлично?

Для справки я использую значения ‘имя’, ‘фамилия’, ‘город’, ‘название компании’, ‘город’. Он правильно выводит результаты для строк с пробелами и изменяет строки из одного слова и правильно помещает их в список.

 def modify():
    
    for i in range(0,len(required) 1):
        print()
        print(i)
        print()
        if chr(32) in str(required[i]):
            
            no_space = ""
            underscore = ""
            
            for l in str(required[i]):
            
                if ord(l) !=32:
                    
                    no_space  = l
                    underscore  = l
                
                elif ord(l) == 32:
                    
                    del i
                    underscore  = "_"
                    
            
            print()
            print(no_space)
            print(underscore)
            # required.index[c] = no_space
            # required.append(underscore)
        
            # required.insert(i 1,underscore)
            # required[i] = no_space  
                      
                            
        elif chr(32) not in str(required[i]):
            
            if chr(95) in str(required[i]):
                continue
            
            elif chr(95) not in str(required[i]):
            
                additional = "the_"   str(required[i])
            
                required.insert(i 1,additional)
            
    print()
    for t in range(len(required)):
        print(str(t 1) ". " required[t])
  

Спасибо! Я надеюсь, что это не слишком запутанно!

Ответ №1:

Я думаю, что ошибка вызвана этой строкой:

 del i
  

Вы удаляете значение, присвоенное i в этот конкретный момент, поэтому в начале вы можете распечатать его, но после этого оно выдает исключение.

Комментарии:

1. Боже мой. В этом проблема. Спасибо! Я удалял неправильную переменную. Теперь я изменил его на ‘L’, чтобы он правильно удалял пробел.