我刚刚开始学习使用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块。这是更合适的方法吗?现在,我只是重新引发异常,以将其冒泡到调用堆栈中。我已经读到经验法则是在可以处理的地方处理异常,但是对于放置在何处仍然感到困惑。谢谢。