【问题标题】:Retry urllib request on exception异常时重试 urllib 请求
【发布时间】:2017-11-03 18:08:07
【问题描述】:

我的树莓派上有一个非常小而简单的 Python 脚本,只要有活动的 Wi-Fi 连接,它就可以正常工作。覆盆子已连接到移动热点,它可能会失去连接,因为它可能会超出范围。一旦发生这种情况,它就会引发异常并结束请求“while”循环。

我希望获得更多信息,了解如何使此脚本暂停或“忽略”异常,以便在连接恢复后立即返回循环。

    import urllib
    import serial
    from time import sleep

    link = "http://myurl/"
    while True:
        f = urllib.urlopen(link)
        myfile = f.read()
        print myfile
        ser = serial.Serial('/dev/ttyUSB0', 9600)
        ser.write(myfile)
        sleep(3)

【问题讨论】:

  • 如果你知道这行:f = urllib.urlopen(link) 可能会引发异常,你可以用try...except... 包装它并按照你想要的方式处理它
  • try/except 和例外情况下,pass

标签: python exception connection urllib


【解决方案1】:

您可以尝试一种叫做(显然)try 声明的东西!

在您的while 循环中,您可以使用try: except 块来确保即使您的代码没有执行(您的 pi 失去连接或发生其他奇怪的事情)您也不会结束程序!

这种类型的代码如下所示:

import urllib
import serial
from time import sleep

link = "http://myurl/"
while True:
    try:
         f = urllib.urlopen(link)
         myfile = f.read()
         print myfile
         ser = serial.Serial('/dev/ttyUSB0', 9600)
         ser.write(myfile)
         sleep(3)
    except:
         sleep(3) #If the code executed in the try part fails, then your program will simply sleep off 3 seconds before trying again!

【讨论】:

  • 非常感谢,我搜索了很多这些异常规则,但我从未见过可以使用它的简单性。这就像一个魅力!
  • 什么是我不使用睡眠而在except: 下只使用pass?它会立即重试吗?
  • 其他SO post 会很有用。
猜你喜欢
  • 2018-09-05
  • 2019-04-23
  • 2021-10-29
  • 1970-01-01
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
相关资源
最近更新 更多