2009-06-07 10 views

Respuesta

-10

Borró su variable __builtins__.

¿Cómo solucionar esto? No elimine __builtins__.

Also can someone explain step by step what that error message means?

Significa que python no puede encontrar la función "recargar".

reload (script4.py)

Esto es incorrecto. si lo hizo "import script4", entonces debe hacer "reload (script4)"

+0

que estoy recibiendo el mismo error, pero existe mi __builtins__ – Billybonks

+0

¿Dónde está la parte donde está eliminando '__builtins__' – OverCoder

160

reload es un built-in en Python 2, pero no en Python 3, por lo que se espera el error que está viendo.

Si realmente debe volver a cargar un módulo en Python 3, se debe utilizar ya sea:

+16

Esta respuesta hace que suene como malo cargar un módulo en Python 3. ¿Cuál es el pensamiento detrás de esto? – ABM

+5

Recargar es siempre problemático. Recarga las variables del módulo de actualizaciones, pero no elimina las antiguas, por lo que si cambia el nombre, el nombre antiguo seguirá existiendo. Si cambia las definiciones de clase, los objetos existentes seguirán teniendo el tipo antiguo. Finalmente, algunos módulos ejecutan código en el momento de la importación que no está diseñado para ejecutarse dos veces. Por lo tanto, es mejor evitar la recarga, pero a menudo es muy conveniente. – Evan

+2

Diría que es a menudo problemático, pero no siempre. Para estar seguros, creo que los casos de uso válidos para escribir 'reload' en un script son muy raros, y aquellos que emplean ese tipo de arte oscuro es poco probable que estén leyendo este comentario. Sin embargo, si está desarrollando un módulo y está usando una consola IPython para probarlo interactivamente, entonces 'reload' puede ser útil en ese flujo de trabajo. Sin embargo, como dijo @Evan, ten cuidado con los efectos secundarios del tiempo de importación. En general, diría que evite 'recargar' los módulos de otra persona. 'recargar' la tuya tiene sentido durante el tiempo de diseño. –

50
import imp 
imp.reload(script4) 
+3

Desaprobado desde Python 3.4 - use 'importlib' en su lugar. –

46

Para> = Python3.4:

import importlib 
importlib.reload(module) 

Para < = Python3.3:

import imp 
imp.reload(module) 

Para python2.X:

Uso del reload() función incorporada.

reload(module) 
15

Para ampliar las respuestas escritos con anterioridad, si desea una solución única que funcionará en las versiones de Python 2 y 3, puede utilizar el siguiente:

try: 
    reload # Python 2.7 
except NameError: 
    try: 
     from importlib import reload # Python 3.4+ 
    except ImportError: 
     from imp import reload # Python 3.0 - 3.3 
+11

¿Pasar de Python 2 a 3 no es tan divertido? – speedplane

+0

¡muy útil! Gracias. –

8

recomiendo el uso de la siguiente fragmento de código que funciona en todas las versiones python (requiere six):

from six.moves import reload_module 
reload_module(module) 
Cuestiones relacionadas