我们是否应该始终将我们编写的每个函数都用一个 try...except
块括起来?我问这个是因为有时我们在一个函数中 raise Exception
,而调用这个函数的调用者没有异常
def caller():
stdout, stderr = callee(....)
def callee():
....
if stderr:
raise StandardError(....)
然后我们的应用程序崩溃。在这个明显的例子中,我很想用try..except
.
但是我已经阅读了很多 Python 代码,但他们并没有一直这样做try..block
。
def cmd(cmdl):
try:
pid = Popen(cmdl, stdout=PIPE, stderr=PIPE)
except Exception, e:
raise e
stdout, stderr = pid.communicate()
if pid.returncode != 0:
raise StandardError(stderr)
return (stdout, stderr)
def addandremove(*args,**kwargs):
target = kwargs.get('local', os.getcwd())
f = kwargs.get('file', None)
vcs = kwargs.get('vcs', 'hg')
if vcs is "hg":
try:
stdout, stderr = cmd(['hg', 'addremove', '--similarity 95'])
except StandardError, e:
// do some recovery
except Exception, e:
// do something meaningful
return True
真正困扰我的是:
如果有第三个函数addandremove()
在其中一个语句中调用,我们是否也用 try..except 块包围调用?如果这个第三个函数有 3 行,并且每个函数调用自己都有一个 try-except 怎么办?我很抱歉建立这个。但这是我不明白的问题。