У меня есть функция, которая выглядит для специальных Element
, если файлы проекта:перехватывать исключение с подъемным
def csproj_tag_finder(mod_proj_file):
"""Looking for 'BuildType' element in each module's csproj file passed in `mod_proj_file`
ard return it's value (CLOUD, MAIN, NGUI, NONE)"""
try:
tree = ET.ElementTree(file=mod_proj_file)
root = tree.getroot()
for element in root.iterfind('.//'):
if ('BuildType') in element.tag:
return element.text
except IOError as e:
# print 'WARNING: cant find file: %s' % e
Если файл не найден - он печатает 'WARNING: cant find file: %s' % e
.
Эта функция вызывается из другого:
def parser(modename, mod_proj_file):
...
# module's tag's from project file in <BuildType> elements, looks like CLOUD
mod_tag_from_csproj = csproj_tag_finder(mod_proj_file)
if not mod_tag_from_csproj:
print('WARNING: module %s have not <BuildType> elements in file %s!' % (modename, mod_proj_file))
...
Так что - если файл не найден - csproj_tag_finder()
возврат None
тип и печать WARNING
. Вторая функция - parser()
найти пустой mod_tag_from_csproj
переменная, а также печать WARNING
. Это безобидно, поэтому я хочу сделать csproj_tag_finder()
поднять специальный Exception
, так parser()
за исключением этого и пройти ==
проверить, а не печатать текст.
Я пытался добавить что-то вроде:
...
except IOError as e:
# print 'WARNING: cant find file: %s' % e
raise Exception('NoFile')
к csproj_tag_finder()
, чтобы поймать его позже в parser()
- но это немедленно прервать дальнейшие шаги.
P.S. Позже if not mod_tag_from_csproj:
вызовет еще одну функцию, чтобы добавить новый Element
. Эта задача может быть решена только с return 'NoFile'
, а затем поймать с if/else
- но мне кажется, что raise
будет более правильным способом здесь. Или нет?