单击停止按钮后,Python中出现错误

时间:2018-07-08 01:55:13

标签: python

请帮助我,我是Python的初学者。运行代码时,一切都很好,但是单击“停止”按钮后出现错误。我该如何解决这个问题?

代码:

import RPi.GPIO as GPIO
import dht11
import time
import datetime

# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()

# read data using pin 17
instance = dht11.DHT11(pin=17)

while True:
    result = instance.read()
    if result.is_valid():
        print("Last valid input: " + str(datetime.datetime.now()))
        print("Temperature: %d C" % result.temperature)
        print("Humidity: %d %%" % result.humidity)

    time.sleep(2)

输出:

>>> %Run dht11_example.py
  Last valid input : 2018-07-08 02:33:31. 993427
  Temperature : 30 C
  Humidity : 52%

  Traceback (most recent call last):
    File "path/file.py", line 21, in <module>
      time.sleep(2)
  KeyboardInterrupt: Execution Interrupted

>>>

错误:

  Traceback (most recent call last):
    File "path/file.py", line 21, in <module>
      time.sleep(2)
  KeyboardInterrupt: Execution Interrupted

2 个答案:

答案 0 :(得分:1)

您只是误解了KeyboardInterrupt的含义。引用the relevant Python docs

  

例外 KeyboardInterrupt

     
    

在用户按下中断键(通常为Control-CDelete)时引发。在执行期间,会定期检查中断。异常继承自BaseException,以免被捕获Exception的代码意外捕获,从而防止解释器退出。

  

在这种情况下,“中断键”只是IDE的停止按钮,而不是任何键盘快捷键。您没有犯任何错误。我确实认为您的IDE不应显示该错误,因为它并不是真正的错误,并且使它看起来像一个错误。您可以放心地忽略此错误,或按照blhsing's advice并将代码包装在try / except KeyboardInterrupt中,使其看起来更漂亮。坦白说,我不会,但这最终是一个见解的问题。

答案 1 :(得分:1)

当您使用ctrl-C手动中止脚本的执行时,会引发KeyboardInterrupt异常,因此它并不是真正的错误,但是可以通过按捕获来按ctrl-C使其优雅退出。 try块中的异常。

import RPi.GPIO as GPIO
import dht11
import time
import datetime

# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()

# read data using pin 17
instance = dht11.DHT11(pin=17)

try:
    while True:
        result = instance.read()
        if result.is_valid():
            print("Last valid input: " + str(datetime.datetime.now()))
            print("Temperature: %d C" % result.temperature)
            print("Humidity: %d %%" % result.humidity)

        time.sleep(2)
except KeyboardInterrupt:
    print('Done.')