简体   繁体   中英

While Loop Breaking Problem (Python)

I am currently trying to connect to a GPS Bluetooth device. My Python 2.7 code worked correctly initially but I have now tried to implement my code into a while loop so that, whilst my device is not available, it will continue to keep on looping for it. Unfortunately, my code seems to be stuck in a loop and repeatedly prints out the error message "Unable to Locate Bluetooth GPS Device. Retrying..." I'm using the Bluetooth module from PyBluez.

Here's my code:-

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...)

As said, basically what I am looking to achieve is for the device discovery object to start and a message appear on console to indicate it is looking for a device transmitting the specified device address (ie "00:11:22:33:44:55:66"). Should no device have this address, I'd like the code to present an error message relating to being unable to locate device and then I'd like it to continue to keep on looking.

On a side, I would also ultimately like to edit this code so that, after attempting to locate the device for X amount of time / on a number of X occasions but to no avail, I'd like the code to end and the program to present an error message. Any guidance on that?

Thanks

The line

discovered_devices = discover_devices()

should go inside your while loop, before entering the for loop.

Then replace your while loop by a for loop to limit the number of attempts.

And to properly exit the inner for loop, do as @Jeremy said: add

else:
    continue
break

at the end of it.

You may also want to wait between each attempt using sleep() at each iteration of your outer loop.

You're breaking the for loop, not the outer while loop. If you're not doing anything after the for loop, you can propagate the break by adding this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM