Re: [Python-es] capturar error

2017-02-27 Por tema Chema Cortes
El vie., 24 feb. 2017 a las 16:26, Gonzalo V () 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 
> 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@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] capturar error

2017-02-27 Por tema Gonzalo V
gracias!!

El 27 feb. 2017 20:23, "Chema Cortes"  escribió:

> El vie., 24 feb. 2017 a las 16:26, Gonzalo V ()
> 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 
>> 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@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
> --
> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
> http://blog.ch3m4.org 
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es