请帮助我,我是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
答案 0 :(得分:1)
您只是误解了KeyboardInterrupt
的含义。引用the relevant Python docs:
例外 KeyboardInterrupt
在用户按下中断键(通常为
Control-C
或Delete
)时引发。在执行期间,会定期检查中断。异常继承自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.')