在函数内部和函数调用期间尝试捕获是否是python的好习惯?

时间:2019-04-11 09:22:29

标签: python-3.x try-except

我刚刚开始学习使用python进行try-catch异常处理,并决定在我的使用lxml etree编写基本xml文件的程序中实现它。

我有一个函数,当前包含两个列表和一个文件。列表中的元素被写为xml文件的.text参数。

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

在我的主要功能中,我已经实现了通过另一个try-except块来处理文件或目录是否无效。

#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

我认为我应该做的是,但是不确定的是,由于我在main内部有一个更高级别的处理程序,因此完全删除了函数内部的try-except块。这是更合适的方法吗?现在,我只是重新引发异常,以将其冒泡到调用堆栈中。我已经读到经验法则是在可以处理的地方处理异常,但是对于放置在何处仍然感到困惑。谢谢。

0 个答案:

没有答案