try...except
块包含起来?
我问这个问题是因为有时在一个函数中我们会抛出 异常
,而调用该函数的调用方没有异常处理。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块呢?抱歉我让问题变得复杂了。但这是我不理解的问题。
try...except
块,并且只捕获你预期的特定类型的异常。 - Joel Cornett