[Python-es] capturar error

Chema Cortes pych3m4 en gmail.com
Lun Feb 27 18:22:54 EST 2017


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>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20170227/07344d9a/attachment.html>


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