我需要你的建议。我正在与WMS(Web地图服务)建立连接。如果已建立连接,则会添加WMS以在matplot窗口中绘制。在大多数情况下,WMS中的图像都会正确显示。但是,在某些情况下,WMS中的图像加载时间过长,这会导致错误(我在下面附上了这些错误)。这通常是超时错误。
我想把我的代码带到一个表单中,当超时时,WMS中的图像将停止加载。我想避免再次请求图像。
为此,我希望除了TimeError。不幸的是,我不能。当然,我试过
除了:
方法(没有指定错误),但它不起作用。下面的代码也不起作用。
try:
resp = requests.get('http://mapy.geoportal.gov.pl/wss/service/img/guest/ORTO/MapServer/WMSServer')
odpowiedz_wms = resp.status_code except:
resp.status_code = 0 if resp.status_code == 200:
wms = ax.add_wms(wms='http://mapy.geoportal.gov.pl/wss/service/img/guest/ORTO/MapServer/WMSServer', layers=['Raster'])
try:
plt.draw()
except (requests.exceptions.RequestException,socket.timeout,timeout, exceptions.ConnectionError,ReadTimeout, TimeoutError, exceptions.Timeout,exceptions.ReadTimeoutError,ReadTimeoutError,exceptions.ConnectTimeout, exceptions.ReadTimeout, requests.exceptions.ReadTimeout, urllib3.exceptions.ReadTimeoutError, socket.timeout) as e:
wms.remove()
plt.draw()
Tkinter回调Traceback异常(最近一次调用最后一次):(…)
文件"C:\Python35\lib\socket.py",第575行,在readinto中回归自我_sock.recv_into(b)socket.timeout:超时
在处理上述异常的过程中,发生了另一个异常:
回溯(最后一次调用):(…)文件"C:\Python35\lib\site packages\urllib3\connectionpool.py",第306行,在_raise_timeout中引发ReadTimeoutError(self,url,"读取超时。(读取超时=%s)"%timeout_value)urlib3.exceptions.ReadTimeoutError:HTTPConnectionPool(host='mapy.geoportal.gov.pl',port=80):读取定时出来(读取超时=30)
在处理上述异常的过程中,发生了另一个异常:
Traceback(最近一次调用):(…)r=adapter.send(request,**kwargs)文件"C:\Python35\lib\site packages\requests\adapters.py",第526行,在send中引发ReadTimeout(e,request=request)requests.exceptions.ReadTimeout:HTTPConnectionPool(host='mapy.geoportal.gov.pl',port=80):读取定时出来(读取超时=30)
当一段代码中抛出异常时
- 堆栈将展开,直到到达异常处理程序(try-except块)
- 如果在处理异常期间引发另一个异常(在except块代码中)。然后堆栈将进一步展开到能够捕获异常的下一个异常处理程序。现在需要处理的异常不是原来的异常。现在是提出的最后一个例外
- 如果调用堆栈展开到调用堆栈上没有异常处理程序,那么进程将终止,堆栈跟踪将转储到屏幕上,显示所有错误
- 许多库都包含记录器,这些记录器将在处理异常时打印出堆栈跟踪。在这些情况下,您仍然可以将堆栈跟踪转储到屏幕上。但例外情况并不一定会终止该过程。它可以处理
- 在异常处理程序中实现日志记录是一种很好的做法,这样您就可以知道发生了哪些异常,并且在出现问题时可以进行调试
- 在这种情况下,代码必须处理的当前异常不是抛出的第一个异常。需要处理的是ReadTimeout。尽管如此,在没有参数的情况下使用except是捕捉任何出现的内容的可靠方法必须谨慎使用这种异常处理方法,并且只能作为最后手段。它通常会捕获那些你从未打算捕获的真正错误的异常。始终尝试指定您实际想要捕获的异常类型
示例
try:
try:
1/0
except ZeroDivisionError:
# Catches the ZeroDivisionError
raise IndexError
except IndexError:
# Catches the IndexError - Doesn't need to catch the ZeroDivisionError
raise NameError # raises unhandled exception. Process terminated and entire stack trace will be printed
输出
Traceback (most recent call last):
File "pyex.py", line 14, in <module>
1/0
ZeroDivisionError: division by zero
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "pyex.py", line 17, in <module>
raise IndexError
IndexError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "pyex.py", line 21, in <module>
raise NameError # raises unhandled exception. Entire stack trace
will be printed out
NameError