python - Python中断循环并再次进入循环
问题描述
我有以下代码
import serial
import time
ser = serial.Serial('COM10', 9600, timeout=0)
timeout = time.time() + 60*1
def readresponse():
while 1:
try:
print(ser.readline())
time.sleep(1)
except ser.SerialTimeoutException:
print('Data could not be read')
if (time.time() > timeout):
break
time.sleep(1)
def sendHttpPost():
ser.write('AT+HTTPACTION=1\r'.encode())
def initialAtCommands():
ser.write('AT+SAPBR=3,1,\"Contype\",\"GPRS\"\r'.encode())
ser.write('AT+SAPBR=3,1,\"APN\",\"APN\"\r'.encode())
ser.write('AT+SAPBR=1,1\r'.encode())
ser.write('AT+HTTPINIT\r'.encode())
ser.write('AT+HTTPPARA=\"CID\",1\r'.encode())
ser.write('AT+HTTPPARA=\"URL\"URL\"\r'.encode())
if(ser.isOpen() == False):
print("Serialport is currently not connected")
else:
print("Serialport successfully connected")
initialAtCommands()
while 1:
sendHttpPost()
readresponse()
这个想法是,sendhttppost 被执行,然后 readresponse 60 秒,然后再次 sendhttppost。但是代码不会再次进入读取响应。
任何想法为什么?
解决方案
因为你的readResponse()
函数当且仅当它遇到一个serialTimeoutException
. 请注意,您已将break
语句放在块下,而该if
块又位于except
块内。这意味着只要您的程序没有遇到该异常,while
循环就会无限进行。try
如果您希望函数在执行完内部的块后立即返回readResponse()
,那么只需在其后添加一条return
语句print(ser.readline())
并将方法放在函数time.sleep()
的末尾即可。readResponse()
不要将它嵌套在if
块内。
PStime.sleep(1)
这里:
if (time.time() > timeout):
break
time.sleep(1)
是死代码。我认为你需要重新考虑你想用这个if
块做什么。
推荐阅读
- python - 如何从包含另一个列表中的所有特定字符的列表中获取项目
- hadoop - 通过命令行在 mapreduce 作业中传递队列名称
- reactjs - 你能对一系列反应组件进行排序吗?访问反应组件的信息
- flutter - How can I create a custom calendar in Flutter?
- jmeter - 计算网络延迟
- c++ - 包含 XPM 图像时 C++17 中的警告
- amazon-web-services - 在 AWS Athena 中运行查询 SELECT * FROM information_schema.views 时,您是否设法获得了结果?
- wpf - 如何提及 BubbleSeries2D.Points 的来源
- python - 熊猫性能测试
- android - 动画在片段之间的过渡动画期间剪切片段