[Python-es] capturar error

Gonzalo V gvm2121 en gmail.com
Lun Feb 27 19:35:45 EST 2017


gracias!!

El 27 feb. 2017 20:23, "Chema Cortes" <pych3m4 en gmail.com> escribió:

> El vie., 24 feb. 2017 a las 16:26, Gonzalo V (<gvm2121 en gmail.com>)
> escribió:
>
>> Amigos, una consulta cortita
>>
>> tengo un error que es así:
>> Traceback (most recent call last):
>>   File "C:\Users\note\AppData\Local\Programs\Python\Python35-32\alumnos.py",
>> line 16, in <module>
>>     vot=par.find_next().get_text()
>> AttributeError: 'NoneType' object has no attribute 'find_next'
>>
>>
>>
>> try:
>>     par=soup.find(string=re.compile(alumno))
>>     vot=par.find_next().get_text()
>>     titulo=soup.find('titulo').get_text()
>>
>> except AttributeError as e:
>>    if e.args=='NoneType':
>>        print('adasd')
>> sé capturar el AttributeError pero no sé como capturar solo el NoneType
>> para que haga algo si eso ocurre.
>> si no está el alumno, levanta Nonetype, pero no sé como capturarlo¿cómo
>> se hace?
>>
>>
> Las excepciones no almacenan ninguna información sobre las circunsancias
> que las han originado. Aún es más, los mensajes que usan no son parte de la
> API de python, por lo que ni siquiera es seguro que no cambien en una
> futura versión de python. Ahora te dice que el objeto que da error es de
> tipo NoneType, pero no tendría obligación de decirte nada.
>
> Las excepciones son poco más que objetos con los identificar de qué
> situaciones de error puedes recuperar la ejecución, y dejar el resto que
> sigan su curso. Si has identificado el tipo de error (AttributeError) lo
> que toca ahora es saber si ha sido algunos de los objetos que vigilas.
>
> Aunque no sea nada elegante, no queda más remedio que comprobar que cada
> búsqueda efectivamente devuelve algún resultado antes de trabajar con ella,
> lo que impide el encadenamiento normal de operaciones como quieres hacer
> (algo que en lenguajes funcionales se resuelve muy bien con monads). La
> mejor manera de "encadenar" operaciones que puedan fallar es usando
> expresiones if..else:
>
>     par = soup.find(string=re.compile(alumno))
>     vot = par.find_next() if par else None
>     text = vot.get_text() if vot else None
>     if text is None:
>        print("No hay resultados")
>
>
>
>
>>
>> Saludos,
>> Gonzalo
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
> --
> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
> http://blog.ch3m4.org <http://ch3m4.org/blog>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20170227/03ee2270/attachment.html>


Más información sobre la lista de distribución Python-es