nombre global ‘re’ no está definido

Soy nuevo en python y trabajando en un mapa de reducir el problema con el picadillo. Recibo el siguiente error mientras se ejecuta el picadillo de secuencia de comandos.

$python mincemeat.py -p changeme localhost
error: uncaptured python exception, closing channel <__main__.Client connected at 0x923fdcc> 
(<type 'exceptions.NameError'>:global name 're' is not defined
[/usr/lib/python2.7/asyncore.py|read|79]
[/usr/lib/python2.7/asyncore.py|handle_read_event|438] 
[/usr/lib/python2.7/asynchat.py|handle_read|140]
[mincemeat.py|found_terminator|96]
[mincemeat.py|process_command|194]
[mincemeat.py|call_mapfn|170]
[raw1.py|mapfn|43])

Mi código recae en raw1.py secuencia de comandos que se da en la anterior stacktrace como [raw1.py|mapfn|43].

import re
import mincemeat
# ...
allStopWords = {'about':1, 'above':1, 'after':1, 'again':1}
def mapfn(fname, fcont):
# ...
for item in tList[1].split():
word = re.sub(r'[^\w]', ' ', item).lower().strip()        # ERROR
if (word not in allStopWords) and (len(word) > 1):
# ....

Ya he importado re en raw1.py. El error no aparece si puedo importar re en mincemeat.py.

hurra, feliz de ver a un compañero estudiante de la big data curso en coursera.

OriginalEl autor Satyajit Singh | 2012-10-04

3 respuestas

  1. 12

    Usted necesita tener la declaración de importación en mapfn sí mismo. mapfn ejecutado en diferentes python proceso, por lo que no tienen acceso al contexto original (incluidas las importaciones) en el que se declaró.

    Gracias por picadillo! Es una gran herramienta. Me preguntaba ya que esta pregunta puede ser una ocurrencia común, usted podría mencionar esto en su github wiki para la picada?
    Buena idea. Hecho!

    OriginalEl autor Michael Fairley

  2. 4

    “Global” de las variables en python son en realidad en el ámbito de los módulo/archivo en el que está obligado; usted necesita para importar todos los archivos que utiliza.

    El nombre de un módulo es sólo una variable como cualquier otra cosa.

    Se puede ver que Satyajit no importar re en el mismo archivo donde se utiliza. Hacer en la forma de picadillo obras aunque, mapfn termina hasta que se ejecuta en un contexto donde no tienen acceso a los originales de las importaciones.
    mincemeat.py es un archivo separado, sin importar.
    mincemeat.py es una biblioteca que se utiliza, que no tiene dependencia de re. Sin embargo, aunque mapfn se define en raw1.py, termina siendo ejecutadas dentro de una diferente python proceso en el contexto de mincemeat.py. En lugar de modificar la biblioteca en sí misma, la import puede (y debe) ser añadido a mapfn.

    OriginalEl autor Wooble

  3. 0

    Parece que ya han contestado a esta pregunta. Si utiliza volver en mincemeat.py, tendrás que volver a importar.

    OriginalEl autor damzam

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *