Python - Поймать предупреждающее сообщение от определенной функции - PullRequest
0 голосов
/ 26 июня 2019

Я использую 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

Я знаю обходные пути, чтобы избежать этого конкретного предупреждающего сообщения, но очень хотел бы знать,как на самом деле поймать предупреждение.Есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...