2014-09-24 95 views
0

當運行這個代碼的程序將隨機停止,它不會給出錯誤,它只是停止它也永遠不會到達flag3,我測試了這個只有標誌沒有電機控制同樣的問題,我可以超載somthing,它只是退出了,請幫助python無限循環意外結束

import time 
import display 
import servo 
import moter 
import pic 
import button 


import RPi.GPIO as GPIO 


def main(): 
    GPIO.cleanup() 
    moter.init() 
    servo.init() 
    display.init() 
    pic.init() 
    moter.start() 
    #servo.start() 
    try: 
     while True: 
      d = pic.mesure() 
      print "Flag1" 
      while d > 100: 
       moter.start() 
       moter.forward(90) 
       d = pic.mesure() 
       print d 
      moter.stop_drive() 
      print "Flag2" 
     print "Flag3" 
    except KeyboardInterrupt: 
     GPIO.cleanup() 
     pass 
    GPIO.cleanup() 

if __name__ == '__main__': 
    #debug("----------========== Starting session! ==========----------") 
    main() 

回答

0

您不必在while True:循環任何break - 爲什麼你希望它永遠結束?

0

不會得到flag3。永遠!

它將永遠運行外循環,卡在picmoter(原文如此)調用之一中,或者引發異常並退出。

該程序的輸出將在計算出哪些情況實際發生時具有無法估量的價值。

例如,你看到flag1?那麼flag2?或者所有的d值?

print放在異常區域,並在try塊後面看看是否出現

如果您還沒有一個print聲明調試期間每兩行呢,你不把它當回事:-)

+0

我不認爲它的子程序,因爲我已經評論他們,仍然有同樣的問題, – 2014-09-30 22:11:11

+0

和LOL生病添加一些更多打印到目前爲止我得到國旗1和2但生病添加一些更多,以瞭解最新謝謝 – 2014-09-30 22:17:40

0

我懷疑有被拋出的異常。嘗試打印異常以查看問題出在哪裏,或者刪除try塊,並查看它出錯的行。

0

我不認爲該程序正在停止,但它不能做任何事情之後。你啓動while語句,並且它通過代碼運行,然後不被告知停止,所以它從語句的頂部開始,但沒有任何事情要做,所以它從頭開始。您可以嘗試:

while True: 
    d = pic.mesure() 
    print "Flag1" 
    while d > 100: 
     moter.start() 
     moter.forward(90) 
     d = pic.mesure() 
     print d 
    moter.stop_drive() 
    print "Flag2" 
    break 
print "Flag3" 

這將停止循環並繼續執行程序。