105

try ブロックのコードに問題があります。簡単にするために、これは私のコードです:

try:
    code a
    code b #if b fails, it should ignore, and go to c.
    code c #if c fails, go to d
    code d
except:
    pass

このようなことは可能ですか?

4

9 に答える 9

162

この個別の tryブロックを作成する必要があります。

try:
    code a
except ExplicitException:
    pass

try:
    code b
except ExplicitException:
    try:
        code c
    except ExplicitException:
        try:
            code d
        except ExplicitException:
            pass

これは、失敗した場合にcode c のみ実行することを前提としています。code b

code c 関係なく実行する必要がある場合は、tryブロックを次々に配置する必要があります。

try:
    code a
except ExplicitException:
    pass

try:
    code b
except ExplicitException:
    pass

try:
    code c
except ExplicitException:
    pass

try:
    code d
except ExplicitException:
    pass

すべての例外をやみくもに無視す​​ることは決して良い習慣except ExplicitExceptionではないため、ここで使用しています。を無視することになりますが、それ以外の場合も、何らかの再レイズやそれらを処理するための意識的な理由なしに、通常は無視したり傍受したりしたくないものです。MemoryErrorKeyboardInterruptSystemExit

于 2013-06-26T14:03:11.453 に答える
16

ステートメントを抽出 (リファクタリング) します。andそして、との魔法を使って、or短絡するタイミングを決定します。

def a():
    try: # a code
    except: pass # or raise
    else: return True

def b():
    try: # b code
    except: pass # or raise
    else: return True

def c():
    try: # c code
    except: pass # or raise
    else: return True

def d():
    try: # d code
    except: pass # or raise
    else: return True

def main():   
    try:
        a() and b() or c() or d()
    except:
        pass
于 2013-06-26T14:04:21.007 に答える