如何从BluetoothError获取错误代码

时间:2018-02-18 16:28:43

标签: python python-3.x pybluez

我有这个代码用于从蓝牙插座读取:

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,这是正确的吗?

2 个答案:

答案 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