我有一个函数,它查找特殊的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
。在
此函数从另一个函数调用:
^{pr2}$所以-当文件找不到-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
在这里会更正确。还是没有?在
raise
立即中断下一步正是它应该做的。事实上,这就是例外的全部原因。在但是}的全部要点。在
return
也会立即中断下一步,因为提前返回也是{如果你想把错误保存到以后,继续做一些其他的工作,然后在最后提出它,你必须显式地这样做。例如:
现在,只要没有您忘记处理的意外异常,上一次失败的都将在
error
中,并在最后引发。在作为一个补充说明,您可能希望创建一个
^{pr2}$NoFileException
子类,然后使用Exception('NoFile')
来测试异常字符串,而不需要测试它,只需使用except NoFileException:
来处理它。这意味着您可以在异常中携带一些其他有用的信息(实际的异常、文件名等),而不会妨碍它。如果这听起来很可怕,那就不是了。简直就是一句话:相关问题 更多 >
编程相关推荐