我正在使用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
我知道解决方法是首先避免该特定警告消息,但真的很想知道如何实际捕获警告消息。有什么建议吗?