python 脚本在 raspberry pi 3 上被阻止

python script blocked on raspberry pi 3

我在 raspberry pi3 上的 python 脚本有一些问题。

我发送了一个 http 请求,脚本很少在请求函数上停止并且从不退出。

代码:

params = json.dumps({"toto: tata"}).encode('utf8')
head = {'content-type': 'application/json'}
req = urllib.request.Request('http://www.toto.com', data = params, headers = head)
try:
    response = urllib.request.urlopen(req) # <- here the problem

except:
    print("TCP_IP: may not connected to the internet")

有关信息,我使用 python3.4,OS 是 Raspbian。

经过几次测试:

-问题大部分时间出现在凌晨2点(GMT+2)(互联网服务提供商的更新?)

-我通过集线器将树莓派连接到互联网。如果我从集线器上拔下覆盆子。没问题,脚本会在几秒钟后引发异常。但是如果我从互联网上拔下集线器。脚本保持停止状态(对于 OS,它始终连接到互联网)。

看起来当没有给 urlopen 超时时,它永远不会超时(参见 )。如果您给出超时应该可以解决您的问题。

response = urllib.request.urlopen(req, timeout=20)

旁节点:捕获特定异常比捕获所有异常更好,例如您还会捕获诸如 ZeroDivisionError 之类的东西,而您不想在那里捕获它。