Python: ¿por qué aparece este error local independiente?

CorePress2023-11-30  1

Esta pregunta ya tiene respuestas aquí: ¿Cómo reemplazar varias subcadenas de una cadena? (28 respuestas) Cerrado hace 3 años.

se supone que la función censura las palabras en la lista de términos propietarios:

proprietary_terms = ["she", "personality matrix", "sense of self", "self-preservation", "learning algorithm", "her", "herself"]
def  censored_list(text, List):
  for i in text:

    for word in List:
      if i == word:
        new_text = text.replace(i, "*" )
      return new_text
print(censored_list(email_two, proprietary_terms))  

pero en su lugar obtengo:

Traceback (most recent call last):
  File "script.py", line 19, in <module>
    print(censored_list(email_two, proprietary_terms))         
  File "script.py", line 18, in censored_list
    return new_text
UnboundLocalError: local variable 'new_text' referenced before assignment

otra pregunta, ¿la lógica parece correcta?

EDIT:

¿Alguien puede mostrarme un fragmento de código de ejemplo funcional del código anterior?

  • 1 Se le declara texto_nuevo en la declaración if y creo que if i == palabra: no se ejecutará, por lo que recibe este error. Verifique su condición if - Omer Tekbiyik 8 de junio de 2020 a las 13:50
  • Consulta esta pregunta para saber por qué recibes el error UnboundLocalError. Para obtener una solución, consulte ¿Cómo reemplazar varias subcadenas de una cadena? -wjandrea 8 de junio de 2020 a las 14:00


------------------------

Creo que esto es lo que quieres:

import re
text = "She has a personality matrix in her sense of herself"
proprietary_terms = ["she", "personality matrix", "sense of self", "self-preservation", "learning algorithm", "her", "herself"]
def  censored_list(text, List):
    print(text.lower())
    for word in List:
      print(word)
      if re.match('^(?=.*('+word+')).*$',text.lower()):
        print("Found:", word)
        text = text.lower().replace(word, "*" )
    return text
print(censored_list(text, proprietary_terms))



3
  • lo siento. Edité el texto incorrecto :D- usuario2853437 8 de junio de 2020 a las 14:25
  • 1 Creo que editaste la respuesta incorrecta. Prathamesh 8 de junio de 2020 a las 14:26
  • Sí. Pero siempre y cuando ayude a resolver el problema ;) - usuario2853437 8 de junio de 2020 a las 14:30


------------------------

Creo que esto es lo que quieres:

import re
text = "She has a personality matrix in her sense of herself"
proprietary_terms = ["she", "personality matrix", "sense of self", "self-preservation", "learning algorithm", "her", "herself"]
def  censored_list(text, List):
    print(text.lower())
    for word in List:
      print(word)
      if re.match('^(?=.*('+word+')).*$',text.lower()):
        print("Found:", word)
        text = text.lower().replace(word, "*" )
    return text
print(censored_list(text, proprietary_terms))

Pero hay algunos problemas por los cuales tu código no funciona:

  1. Necesitas declarar la variable new_text antes de usarla. De lo contrario, la variable no está vinculada.

  2. Es posible que necesites utilizar expresiones regulares, porque lo que estás buscando puede ser bastante complejo siempre y cuando no busques una sola palabra.

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare