【问题标题】:UnboundLocalError (local variable referenced before assignment)UnboundLocalError(赋值前引用的局部变量)
【发布时间】:2019-09-02 04:56:24
【问题描述】:

我正在尝试制作脚本搜索跟踪号并打印 .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)找到的东西,但我无法让它工作。

提前致谢, 保罗

【问题讨论】:

  • 如果您的try 块没有捕获任何异常,您期望lookupnav_in 具有什么价值?您需要初始化该值。

标签: python debugging pycharm


【解决方案1】:
lookupnav_in = input('Input: ')

这是您定义变量的地方。它位于 try 语句的 except 块中。

if lookupnav_in == 'E':

这是您第一次使用该变量的地方。这只是在 except 块之外。

除非异常实际发生,否则不会执行 except 块。

所以想想如果try 从不抛出异常会发生什么。

从未定义变量。因此错误。

【讨论】:

    【解决方案2】:

    我认为这是因为您的变量 lookupnav_in 在您的 except 块中声明,然后使用 if 语句 在您的 except-block 之外进行检查。在未触发您的例外块的情况下,该变量永远不会被声明。这意味着在使用 if 语句检查它之前,您必须在该特定例外块之外的其他地方声明它。

    【讨论】:

      猜你喜欢
      • 2012-11-14
      • 2013-11-29
      • 1970-01-01
      • 2015-06-14
      • 2018-06-29
      • 2011-10-31
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多