Este código da el error: UnboundLocalError: local variable 'LINES' referenced before assignment pero LINES es claramente inicializado ya que si yo comente la línea de abajo de la impresión de la declaración se produce ningún error y se imprime len(lines) = 0 como se esperaba. No estoy entendiendo algo de python?? Lo que pasa aquí?

LINES = []

def foo():
  for prob in range(1,3):
    print "len(lines) = %d" % len(LINES)
    LINES = []

if __name__ == "__main__":
  foo()

OriginalEl autor anthonybell | 2013-07-15

4 Comentarios

  1. 4

    Puede el acceso variable global desde el interior de foo, pero no se puede volver a enlazar a menos que la global palabra clave se utiliza

    Así que usted puede utilizar LINES.append(...) o LINES[:] = [] pues se trata meramente de la modificación de la lista de que las LÍNEAS de referencias.

    Cuando intenta asignar a LINES utilizando LINES = [], Python sabe que necesita para crear una entrada para las LÍNEAS en las funciones de las variables locales. Puesto que usted está tratando de usar len(LINES) antes de asignar nada a la variable local, se produce un error

    Usted puede inspeccionar foo como este

    >>> foo.func_code.co_nlocals
    2
    >>> foo.func_code.co_varnames
    ('prob', 'LINES')

    Si se define foo de nuevo sin el LINES = [], verás que Python no lo marca como una variable local.

    OriginalEl autor John La Rooy

  2. 3

    Usted necesidad de utilizar el mundial palabra clave:

    def foo():
      global LINES
      for prob in range(1,3):
        print "len(lines) = %d" % len(LINES)
        LINES = []

    De lo contrario, Python va a pensar que LINES es local, y la impresión del valor antes de establecer para [] será un problema

    Usted puede obtener el valor de la variable global LINES por la impresión, pero cuando se tiene la declaración de

    LINES = []

    que intenta establecer LINES a una nueva lista de Python interpreta como una variable local

    Lo que yo veo. pero ¿por qué es que funciona cuando LINES = [] se comenta o se sustituye por LINES.append(prob)?

    OriginalEl autor jh314

  3. 0

    Python buscará primero en el ámbito de la función de la variable, antes de que se ve en el global (nivel de módulo) ámbito de aplicación. Desde que asignar a LINES en su función de ejemplo, python, no sabe el uso de la variable global, pero se intenta acceder a esta variable antes de que se defina. Debe inicializar LINES antes de la instrucción print, o de salir de la LINES = [] declaración.

    OriginalEl autor desired login

  4. 0

    Como usuario Deseado dijo,

    Desde que asignar a las LÍNEAS en su función de ejemplo, python, no sabe el uso de la variable global, pero se intenta acceder a esta variable antes de que se defina.

    Este no es el final, se puede solucionar este problema mediante el uso de una palabra clave global, decirle a python que el LINES en la función es la misma que la LINES fuera de la función.

    Tratar:

    LINES = []
    
    def foo():
      global lines
      for prob in range(1,3):
        print "len(lines) = %d" % len(LINES)
        LINES = []
    
    if __name__ == "__main__":
      foo()

    OriginalEl autor charmoniumQ

Dejar respuesta

Please enter your comment!
Please enter your name here