UnboundLocalError (локальная переменная, на которую ссылаются до назначения) - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь сделать эту часть, где скрипт ищет номер для отслеживания и печатает содержимое документа .txt. Когда я использую эту часть, возникает ошибка:

def lookup_trackingnum():
    logger.info('lookup_trackingnum started - B3                    ')
    print(' ')
    print(' ')
    print(' = = Look Up a Tracking Number = =  ')
    print(' ')
    print(' ')
    lookup_in = input('Tracking Number: ')
    try:
        lookup_path = 'lms19-files/exports/' + lookup_in + '.txt'
        logger.debug('lookup_path created - B3   -   BUG RESOLVING      ')
        with open(lookup_path, 'r') as lookup:
            logger.debug('lookup_path opened - B3   -   BUG RESOLVING       ')
            print(lookup.read())
            logger.debug('lookup_path printed - B3   -   BUG RESOLVING      ')
    except:
        print('ERROR: The Tracking Number ' + lookup_in + ' doesn\'t exist.')
        logger.error('Tracking Number doesn\'t exist - B2                ')
        print(' ')
        print(' ')
        print(' [E] Return to Dashboard  ')
        print(' ')
        logger.debug('Before lookupnav_in input - B3   -   BUG RESOLVING')
        lookupnav_in = input('Input: ')
        logger.debug('After lookupnav_in input - B3   -   BUG RESOLVING ')
    if lookupnav_in == 'E':
        logger.debug('If lookupnav_in - B3   -   BUG RESOLVING          ')
        startmenu()
        logger.debug('startmenu triggered - B3   -   BUG RESOLVING      ')
    else:
        print(lookupnav_in + ' isn\'t a valid input.')
        logger.error('Invalid Input - B3                                ')
        startmenu()

Ошибка:

Traceback (most recent call last):
  File "/Users/User/PycharmProjects/lms19/lms19-beta.py", line 417, in <module>
    startmenu()
  File "/Users/User/PycharmProjects/lms19/lms19-beta.py", line 280, in startmenu
    lookup_trackingnum()
  File "/Users/User/PycharmProjects/lms19/lms19-beta.py", line 253, in lookup_trackingnum
    if lookupnav_in == 'E':
UnboundLocalError: local variable 'lookupnav_in' referenced before assignment

и данные журнала:

lms19 : INFO - Logger Started - B6                                 [2019/04/11 15:20:11]
lms19 : CRITICAL - Setup skipped - B6                              [2019/04/11 15:20:11]
lms19 : INFO - Software Initialised - B6                           [2019/04/11 15:20:11]
lms19 : INFO - Main Script started - B7                            [2019/04/11 15:20:11]
lms19 : INFO - startmenu started - B4                              [2019/04/11 15:20:11]
lms19 : INFO - lookup_trackingnum started - B3                     [2019/04/11 15:20:13]
lms19 : DEBUG - lookup_path created - B3   -   BUG RESOLVING       [2019/04/11 15:20:15]
lms19 : DEBUG - lookup_path opened - B3   -   BUG RESOLVING        [2019/04/11 15:20:15]
lms19 : DEBUG - lookup_path printed - B3   -   BUG RESOLVING       [2019/04/11 15:20:15]

Я перепробовал несколько вещей, которые нашел в Интернете (и в StackExchange), но не смог заставить его работать.

Заранее спасибо, Пол

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Я думаю, это потому, что ваша переменная lookupnav_in объявлена ​​в вашем блоке Except, а затем проверена с помощью оператора if вне вашего блока Except . В случае, если ваш Except-блок не сработал, переменная никогда не объявляется. Это означает, что вам нужно объявить его где-то еще за пределами этого конкретного блока Except, прежде чем он будет проверен с помощью оператора if.

0 голосов
/ 11 апреля 2019
lookupnav_in = input('Input: ')

Здесь вы определяете переменную.Он находится в блоке исключения оператора try.

if lookupnav_in == 'E':

Здесь вы впервые используете переменную.Это только за исключением блока.

Блок исключений не выполняется, если исключение фактически не происходит.

Так что подумайте, что произойдет, если try никогда не выдаст исключение.

Переменная никогда не определяется.Отсюда и ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...