我有这个代码用于从蓝牙插座读取:
socket.settimeout(timeout)
try:
data = socket.recv(1024)
except bluetooth.btcommon.BluetoothError as e:
if e.code == 11:
self.connect()
显然,我想在“正常”和“正常”之间做出改变。超时和其他一些问题(例如蓝牙设备关闭)。上面的代码不起作用,因为code
对象中没有BluetoothError
。
在异常中,我确实看到了代码:
Traceback (most recent call last):
File "myscript.py", line 36, in scan
data = socket.recv(1024)
File "<string>", line 5, in recv
bluetooth.btcommon.BluetoothError: (11, 'Resource temporarily unavailable')
我如何获得该代码?我尝试在线查找参考文档,但无法找到任何内容。
从代码中我可以看到它实际上是IOError
,并且似乎没有办法获得errno
,这是正确的吗?
答案 0 :(得分:0)
我找到了一个解决方案,不是说这是一个很好的解决方案: (11,“资源暂时不可用”)是一个字符串,例如,您通过添加2、3个或更多字符来获得“代码”。 试试这个:
try:
data = socket.recv(1024)
except bluetooth.btcommon.BluetoothError as ex:
print( ord(ex.args[0][1]) + ord(ex.args[0][2]) )
然后您可以替换为:
except bluetooth.btcommon.BluetoothError as ex:
if( ord(ex.args[0][1]) + ord(ex.args[0][2]) == 98 ): #98 for error code 11 with 2 characters
答案 1 :(得分:0)
我最近遇到了类似的情况,这就是我使用的方法。
except bluetooth.btcommon.BluetoothError as btErr:
errCode = eval(btError[0])[0]
if errCode == 11:
self.connect()
根据文档here,errno可以为None,但args将为您提供逐字构造函数参数作为元组。
https://docs.python.org/2/library/exceptions.html#exceptions.EnvironmentError