Является ли хорошей практикой использования Python улавливание try внутри функции и во время вызова функции? - PullRequest
0 голосов
/ 11 апреля 2019

Я только начинаю узнавать об обработке исключений try-catch в python и решил реализовать ее в моей программе, которая записывает базовый xml-файл с использованием lxml etree.

У меня есть функция, которая в настоящее время принимаетв двух списках и файле.Где элементы списка записываются как аргументы .text для файла xml.

def foo(list1,list2,path/to/file):
     ...#do some stuff here
     try:
       tree = etree.Parse(path/to/file)
     except OSError as osErr:
        print('Error in parsing file. File or directory may not exist or is corrupted') 
        raise
     ...#do some stuff again
      for i,cnt in enumerate(list1):
         SomeSubelement.txt = cnt
         try:
            AnotherSubelement.txt = list2[i]
         except IndexError as indxErr:
             print(indxErr)
             raise

И в моей основной функции я реализовал обработку, если файл или каталог недопустимы другой попыткой, кромеblock.

#main
from pathlib import Path

while True:
   Pathtofile = input('Enter file directory: ')
   if not Pathtofile:
       Pathtofile = 'default_path/to/file'
   try:
       AbsPathtofile = Pathtofile.resolve(strict=true)
   except FileNotFoundError as fnfErr:
      print('Invalid Path',fnfErr)
   else:
      break

#Do more stuff
try:
   foo(list1,list2,Pathtofile)
except IndexError as indxErr:
    #Do error handling
except OSError as osErr:
    #Handle this error

То, что я должен делать, но я не уверен в том, чтобы полностью удалить блок try-исключения внутри функции, поскольку у меня есть обработчик более высокого уровня внутри main.Это более подходящий способ?Теперь я просто повторно поднял исключения, чтобы создать пузырек в стеке вызовов.Я читал, что эмпирическое правило заключается в обработке исключений, где оно может быть обработано, но я все еще не понимаю, где это поставить.Спасибо.

...