Se osservi bene le due eccezioni noterai come esse abbiano due codici di errore differenti, ed è proprio su quelli che devi andare ad agire.
Riguardo il come dipende da come la classe OBEXError ti permette di accedere al valore di codice di errore, e questo o lo vedi sulla documentazione o piu' semplicemente guardando il codice della classe OBEXError.
Solitamente il codice di errore è fornito sotto forma di attributo e ci puoi accedere in questo modo:
codice:
try:
foo()
except ErroreDiQualcheTipo, err:
print err.errno
..per cui:
codice:
try:
lightblue.obex.sendfile(device.getAddr(), c[1],"advertisement.jpg")
except lightblue._obexcommon.OBEXError, err:
if err.errno == 111:
print "non ha accettato il file"
elif err.errno == 11:
print "non ha scaricato il file"
else:
raise
...però non è detto che esista "errno", magari lo hanno chiamato "errorcode" o in qualche altro modo, oppure non l'hanno definito proprio e ci accedi tramite slicing in questo modo:
codice:
try:
foo()
except lightblue._obexcommon.OBEXError, err:
print err[0] # codice di errore
print err[1] # stringa di errore
Insomma, è un qualcosa che è a discrezione di chi ha sviluppato l'API.
Utilizzando dir() o help() sulla classe di errore puoi comunque facilmente vedere come hanno impostato la cosa e come regolarti di conseguenza.