Я использую Python 2.7 для изменения шейп-файлов ESRI с OGR из OSGeo .Я создаю новое поле атрибута, но может случиться так, что имя поля уже существует в таблице атрибутов.В этом случае функция отобразит предупреждающее сообщение, подобное этому
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
Я попробовал два самых верхних ответа из В Python, как можно ловить предупреждения, как если бы они были исключениями? , но я боюсь, что предупреждениесообщение не распознается как реальное предупреждение.Я проверил это следующим образом:
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
Я знаю обходные пути, чтобы избежать этого конкретного предупреждающего сообщения, но очень хотел бы знать,как на самом деле поймать предупреждение.Есть предложения?