Foros del Web » Programando para Internet » Python »

Duda con funciones.

Estas en el tema de Duda con funciones. en el foro de Python en Foros del Web. Hola tengo un problema y no logro resolverlo. tengo esta funcion dentro del archivo win1.py Código: def Agregar(): archivo = open("/home/b0nete/Documents/Ninja-IDE/Listado/personasFILE.csv", "a") #a = APPEND ...
  #1 (permalink)  
Antiguo 22/09/2014, 14:13
 
Fecha de Ingreso: septiembre-2014
Mensajes: 2
Antigüedad: 9 años, 7 meses
Puntos: 0
Duda con funciones.

Hola tengo un problema y no logro resolverlo.

tengo esta funcion dentro del archivo win1.py
Código:
def Agregar():
    archivo = open("/home/b0nete/Documents/Ninja-IDE/Listado/personasFILE.csv", "a") #a = APPEND
    archivo.write(txtNombre.get() +","+ txtApellido.get() + "\n")
    archivo.close()
Lo que hace es recuperar lo que contiene la caja de texto y cargarlo en un archivo, funciona exelente.

Pero quiero meter esta función y otras varias en otro archivo llamado metodos.py
entonces lo que hice fue copiar las funciones tal cual estaban en win1.py y pegarlas.
importe metodos.py a win1.py con "from metodos.py import *", lo ejecuto y se carga la ventana win1.py pero al presionar ACEPTAR para que me cargue los datos en el archivo me da este error:

Código:
Running: /home/b0nete/Documents/Ninja-IDE/Listado/win1.py (Mon Sep 22 17:04:05 2014)


Exception in Tkinter callback
Traceback (most recent call last):

  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1486, in __call__
    return self.func(*args)
  File "/home/b0nete/Documents/Ninja-IDE/Listado/methods.py", line 12, in Agregar
    archivo.write(txtNombre.get() +","+ txtApellido.get() + "\n")
NameError: global name 'txtNombre' is not defined

Entiendo que no encuentra txtNombre y txtApellido porque están en otro archivo, pero ahora mi duda es como hacerlo funcionar.
Como le paso a la funcion los parámetros del otro modulo?..
Gracias.
  #2 (permalink)  
Antiguo 23/09/2014, 12:42
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Duda con funciones.

Lo que pasa es que incurriste en varias malas practicas. Pero por ahora solo apuntare a una.

Vamos a ver la definición de la función.
Código Python:
Ver original
  1. def Agregar():
  2.     archivo = open("/home/b0nete/Documents/Ninja-IDE/Listado/personasFILE.csv", "a") #a = APPEND
  3.     archivo.write(txtNombre.get() +","+ txtApellido.get() + "\n")
  4.     archivo.close()
Como puedes ver, ¿Donde esta definido txtApellido y txtNombre? No esta dentro de tu función esto hace que tu funcion este fuertemente ligada a donde quiera que estén txtApellido y txtNombre.

¿Como hacer esto un poco mas reusable?
Código Python:
Ver original
  1. def Agregar(nombre, apellido):
  2.     archivo = open("/home/b0nete/Documents/Ninja-IDE/Listado/personasFILE.csv", "a") #a = APPEND
  3.     archivo.write(nombre +","+ apellido + "\n")
  4.     archivo.close()
Mira que ahora nombre y apellido si estan definidas en la función porque son parámetros que estas esperando. Mas aun, estas esperando solamente el string nada de objetos secundarios que esperas que tengan el método get. Tampoco te importa de donde vengan, tal vez vienen de cajitas de texto o de string hardcodeadas, de un raw_input, de un archivo, realmente no importa de donde lo saques, solo sabes que quieres 2 strings y punto.

El error que te marca
Código:
NameError: global name 'txtNombre' is not defined
Es porque cuando llega a la parte de archivo.write(txtNombre.get() +","+ txtApellido.get() + "\n") txtNombre no se encuentra definido.

Mi recomendaciones:
1. No copies y pegues código sin leerlo.
2. Haz tus funciones reusables.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:25.