我目前正在尝试连接GPS蓝牙设备。我的Python 2.7代码最初工作正常,但我现在尝试将我的代码实现为while循环,这样,当我的设备不可用时,它将继续为它循环。不幸的是,我的代码似乎陷入了循环并反复打印出错误消息“无法找到蓝牙GPS设备。正在重试......”我正在使用PyBluez的蓝牙模块。
这是我的代码: -
import bluetooth
target_address = "00:11:22:33:44:55:66"
discovered_devices = discover_devices() # Object to discover devices from Bluetooth module
while True:
print "Attempting to locate the correct Bluetooth GPS Device..."
for address in discovered_devices:
if address != target_address:
print "Unable to Locate Bluetooth GPS Device. Retrying..."
else:
print "Bluetooth GPS Device Located: ", target_address
break
# move on to next statement outside of loop (connection etc...)
如上所述,基本上我想要实现的是设备发现对象启动并在控制台上显示一条消息,表明它正在寻找发送指定设备地址的设备(即“00:11:22:33” :44:55:66" )。如果没有设备有此地址,我希望代码提供与无法找到设备有关的错误消息,然后我希望它继续继续查找。
另一方面,我最终还是想编辑这段代码,以便在尝试定位设备X时间/多次X次但无效后,我希望代码结束以及提供错误消息的程序。对此有何指导?
由于
答案 0 :(得分:5)
该行
discovered_devices = discover_devices()
在进入while
循环之前,应该进入for
循环。
然后用while
循环替换for
循环以限制尝试次数。
要正确退出内部for
循环,请按@Jeremy说:添加
else:
continue
break
最后。
您可能还希望在外循环的每次迭代中使用sleep()
在每次尝试之间等待。
答案 1 :(得分:4)
您正在打破for
循环,而不是外部while
循环。如果您在for
循环后没有执行任何操作,则可以通过添加以下内容来传播break
:
while True:
print "Attempting to locate the correct Bluetooth GPS Device..."
for address in discovered_devices:
if address != target_address:
print "Unable to Locate Bluetooth GPS Device. Retrying..."
else:
print "Bluetooth GPS Device Located: ", target_address
break
else:
# if we don't break, then continue the while loop normally
continue
# otherwise, break the while loop as well
break