2011-09-20 5 views
1

현재 GPS 블루투스 장치에 연결하려고합니다. 내 Python 2.7 코드는 처음에는 제대로 작동했지만 이제는 내 코드를 while 루프에 구현하여 내 장치를 사용할 수 없지만 계속 반복 할 것입니다. 불행히도, 내 코드가 반복적으로 멈추고 "Bluetooth GPS 장치를 찾을 수 없습니다."라는 오류 메시지가 반복적으로 출력됩니다. PyBluez의 Bluetooth 모듈을 사용하고 있습니다. 여기 While 루프 끊기 문제 (Python)

내 코드입니다 : -
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 번만 사용할 수 있지만 아무런 도움이되지 않도록 코드를 편집하고 싶습니다. 프로그램이 오류 메시지를 표시합니다. 그것에 관한 어떤 지침?

감사

답변

5

discovered_devices = discover_devices() 

while 루프 내부에 가야 라인을하기 전에 for 루프를 입력하십시오.

그런 다음 while 루프를 for 루프로 대체하여 시도 횟수를 제한하십시오.

그리고 제대로 내부 for 루프를 종료하려면 @Jeremy 말했다 않는 : 그것의 끝에서

else: 
    continue 
break 

를 추가합니다.

바깥 쪽 고리를 반복 할 때마다 기다리시고 sleep()을 사용하여 시도 할 때까지 기다려야 할 수도 있습니다.

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 
+1

'while' 루프의 속도를 줄이기 위해 잠을 자고 있다면'else' 절의 'else' 절에서 반드시 수행해야합니다. 또한 Simon이 맞다고 생각합니다. 디바이스 발견은 while 루프의 맨 위에 있어야합니다. 그렇지 않으면 모든 반복이 동일합니다. – agf