Bluetooth + Try Except

Arnau Sanchez pyarnau en gmail.com
Vie Abr 18 21:23:21 CEST 2008


Renato Droguett escribió:
>    try:
>     print "------------> (S) Conectado a %s ----------" % (name)
>     obex.sendfile(host, port, "images/iPAQ.JPG")
>    except BluetoothError, e:
>     print type(e)
>
> Obtengo:
>
> <type 'instance'>
>   
Por curiosidad he bajado las fuentes de python-lightblue, y he aquí un 
ejemplo de cómo lanza excepciones:

#python-lightblue/lightblue/_lightblue.py

try:
    addr = _lightblueutil.hci_read_bd_addr(sock.fileno(), 1000)
except IOError, e:
    raise _lightbluecommon.BluetoothError(str(e))

Yo diría que no es una forma especialmente acertada de hacerlo: crea sus 
propias excepciones (hasta ahí bien), pero luego manda el error en forma 
de cadena, con lo se pierde información.

En resumen, que como al except sólo le llega esa información, vas a 
tener que parsear:

import re
getcode = lambda s: int(re.match(r"\((\d+),", str(e)).group(1))

try:
    lightblue.obex.sendfile(host, port, filename)
except Exception, errstr:
   code =getcode(errstr)

De juzgado de guardia, ¿pero qué alternativa hay sin tocar el código de 
la librería?

(Todo esto sin contar que la excepción puede tener otra forma y el 
parseo fallará.)
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





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