Python-从特定功能捕获警告消息

时间:2019-06-26 06:12:08

标签: python python-2.7 warnings

我正在使用Python 2.7通过OGR from OSGeo更改ESRI Shapefile。我创建了一个新的属性字段,但是该字段名称可能已经存在于属性表中。在这种情况下,该功能将显示这样的警告消息

Warning 6: Normalized/laundered field name: 'id' to 'id_1'

这意味着它将自动重命名该字段。可以,但是我想捕获该警告消息以获取新名称。我尝试使用warnings模块,但无法正常工作。这是我的工作:

import warnings
from osgeo import ogr

myfile = r'D:\work\test.shp'
ds = ogr.Open(myfile, 1)
lyr = ds.GetLayer()
field = ogr.FieldDefn('id', 0)
field.SetWidth(5)
out_lyr.CreateField(field) # prints out the warning

我尝试了In Python, how does one catch warnings as if they were exceptions?的两个最高答案,但我担心警告消息不会被识别为真正的警告。我是这样测试的:

warnings.filterwarnings('error')
try:
    out_lyr.CreateField(field)
except Warning:
    print 'WARNING' # never ends up here

并捕获实际警告:

with warnings.catch_warnings(record=True) as w:
    warnings.simplefilter('always')
    out_lyr.CreateField(field)
    print w # returns an empty list

我知道解决方法是首先避免该特定警告消息,但真的很想知道如何实际捕获警告消息。有什么建议吗?

0 个答案:

没有答案