2014-09-24 96 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" 

这将停止循环并继续执行程序。