書くすべての関数を常に try...except
ブロックで囲む必要がありますか? これを尋ねるのは、ある関数で を発生さException
せ、この関数を呼び出す呼び出し元に例外がない場合があるためです。
def caller():
stdout, stderr = callee(....)
def callee():
....
if stderr:
raise StandardError(....)
その後、アプリケーションがクラッシュします。この明らかなケースでは、callee と caller を で囲みたいと思います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
私を悩ませている本当のことはこれです:
ステートメントの 1 つで呼び出す 3 番目の関数がある場合、その呼び出しaddandremove()
も try..except ブロックで囲みますか? この 3 番目の関数に 3 つの行があり、各関数呼び出し自体に try-except がある場合はどうなるでしょうか? 立ててすみません。しかし、これは私が得られない種類の問題です。