我对Python还不熟悉。我试图重新创建.NETFramework中使用的“Timer”控件(“Timer”在Python中是另一回事……)。因此,基本上,我创建了一个名为CheckMessages的函数,它在执行之后,停止主线程1秒,然后再次调用CheckMessages。在normal情况下(=当代码中没有抛出异常时),这是很好的。一次执行和下一次执行之间的计时显然不精确(它是从不1秒),但对于我的应用程序范围来说,这不是一个问题。 问题是:当抛出异常时,什么都不会发生。代码不符合我的尝试。。。除了逻辑(没有显示日志)和应用程序不退出
import time
import sched
import requests
s = sched.scheduler(time.time, time.sleep)
def CheckMessages(sc):
newMsgsReq = ""
try:
newMsgsReq = requests.get("...")
except requests.HTTPError as errh:
print ("Http Error:",errh)
except requests.ConnectionError as errc:
print ("Connection Error:",errc)
except requests.Timeout as errt:
print ("Timeout Error:",errt)
except requests.RequestException as err:
print ("OOps: Something Else",err)
msgInf = newMsgsReq.text.split("|")
#...
s.enter(1, 1, CheckMessages, (sc,))
s.enter(1, 1, CheckMessages, (s,))
s.run()
例如,当我禁用internet连接时,我希望我的应用程序报告:connection Error:... (代码段的第11行)。相反,正如所说,什么也没发生。应用程序仍处于活动状态,但输出为空。每1秒停止执行CheckMessages功能
当我输入一个无效的URL(“http://sdkls9e9i.ooo”)时,我看到异常被成功打印出来
在处理请求的异常之后,脚本将退出
AttributeError: 'str' object has no attribute 'text'
,因为您试图在处理异常之后处理响应(msgInf = newMsgsReq.text.split("|")
)当我听从你的指示,关闭了我的网络连接时,脚本确实“挂起”。按CTRL+C显示它正在等待:
在我添加了timeout:
requests.get("...", timeout=1)
之后,我也得到了异常注意,pep8风格指南建议使用^{} for variable and function names
相关问题 更多 >
编程相关推荐