Re: [Python-es] python: core dumped.. ¿manejo de excepciones?
Claudio A. Quezada R.
claudio.quezada.r en gmail.com
Lun Ago 13 18:42:12 CEST 2007
Hola Chema,
Gracias por tus comentarios, y si, es un método, no una función (ya
decía yo que no soy programador...). Bueno, lo que hace es básicamente
crear los objetos (especie y estacion) que proceden de otra grilla, y
el text() retorna un Qstring. Entonces, debo crear un item widget (el
QTableWidgetItem) para asignarle ese texto, y el widget nuevo se lo
asigno a la posicion (j,i) de la nueva grilla. Por eso debo manejar
los contenidos de las celdas (cabeceras o no) a través de los widget
item. El asunto es que estos objetos creados efectivamente los
almaceno (en el biometria.setItem(row,column,itemWidget)) y estas
grillas están digamos "cargadas" en la interfaz gráfica (a self.ui le
asigno Interfaz() que es donde se crearon originalmente las grillas
self.ui.grillaDatos y self.ui.grillaBiometria).
Ahora, el asunto es que si yo "hecho a andar" el método, por primera
vez, funciona de perillas. El error se produce a la segunda ocasión
que lo llamo, en la que ya hay contenido en la grillaBiometria. Hay
otros métodos para eliminar filas, eliminar el contenido de las
celdas, uno para destruir el widget y varios más. Los he probado todos
y en algún momento me dan problemas (especialmente si itero con 10000
o 15000 individuos)... Entonces por lo que me he dado cuenta el asunto
no es al llenar la grillaBiometria por primera vez, sino, al
reemplazar el contenido, al destruirlo, o algo por el estilo en el
setItem(row,column,item)...
Por eso yo queria saber como revisar paso a paso esta función, ahora
echare a andar el profiler y el debuuger, espero con eso saber
exactamente en que punto falla el método y porque. Una opción sería
modificarlo para que no falle, y la otra sería reimplementar el
notufy() de QApplication, que es lo que he estado averiguando.
Saludos,
Claudio
El 13/08/07, Chema Cortes <pych3m4 en gmail.com> escribió:
> El 9/08/07, Claudio A. Quezada R. <claudio.quezada.r en gmail.com> escribió:
>
> > Mi funcion:
>
> Supongo que más que función es un "método" de un objeto.
>
> > def generarTabBiometria(self):
> > grilla = self.ui.grillaDatos
> > biometria = self.ui.grillaBiometria
> >
> > biometria.clearContents()
> > total = 0
> >
> > for j in range(grilla.rowCount()):
> > especie = QtGui.QTableWidgetItem()
> > especie.setText(grilla.verticalHeaderItem(j).text())
> > for i in range(grilla.columnCount()):
> > if grilla.item(j,i):
> > estacion = QtGui.QTableWidgetItem()
> > estacion.setText(grilla.horizontalHeaderItem(i).text())
> > individuos = int(grilla.item(j,i).text())
> > total += individuos
> > biometria.setRowCount(total)
> > for k in range(total-individuos,total):
> > biometria.setItem(k,0,estacion)
> > biometria.setItem(k,1,especie)
> >
> > biometria.resizeColumnToContents(0)
> > biometria.resizeColumnToContents(1)
> >
> > Y me da un error python core dumped (no lo recuerdo textualmente)
>
> El problema del "core dumped" es que no deja más rastro que el vaciado
> de memoria. El kernel ha considerado que esa aplicación estaba fuera
> de control y la ha liquidado.
>
> No entiendo mucho de pyqt, pero veo que en tu método hay objetos
> (especie y estacion) que creas, pero que no almacenas en ningún lado.
> Posiblemente (ya digo que no conozco pyqt), al retornar del método,
> las referencias que maneja la librería qt hayan quedado inválidas al
> desaparecer los objetos. Puede que de ahí venga todo el problema.
> Intenta guardar estas referencias junto a la referencia que tienes a
> la grilla.
>
> También puede que esté equivocado, así que mírate otros ejemplos a ver
> cómo lo hacen.
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>
--
Claudio Quezada Romegialli
Ingeniero Ambiental
(02)7321665 - 81466049
Más información sobre la lista de distribución Python-es