2016-08-20 6 views
1

Python 3で呼び出し側に特定の例外を発生させる方法を無視できますか?Python 3の呼び出し元に例外を発生させないようにします。3

例:私は誰かがため、Pythonで思い出したされている最後のスローされた例外の、例外投げ声明に関与するオブジェクトの一部が無期限を生きた保たれている」と述べた

def do_something(): 
    try: 
     statement1 
     statement2 
    except Exception as e: 
     # ignore the exception 
     logging.warning("this is normal, exception is ignored") 


try: 
    do_something() 
except Exception as e: 
    # this is unexpected control flow, the first exception is already ignored !! 
    logging.error("unexpected error") 
    logging.error(e) # prints None 

"そして、この場合、" sys.exc_clear() "を使用するように言及しました。これは、Python 3ではもう利用できません。

例えば

は、Pythonの2に、例外がまだされています。それは、Python 2で行ったように、Pythonが内部的に最後に発生した例外が格納されていないので、

+2

あなたが外 'except'ブロックは、あなたの実際のプログラムでトリガされているものを見る場合は、あなたの質問に反映されていないいくつかの他の問題があります。あなたの質問のコード構造は決して外側の 'except'ブロックを引き起こすべきではありません。 – user2357112

答えて

1

Pythonの3でこれを行う必要はありません、sys.exc_clear()を除去しときに、関数の内部で生かさ:

def foo(): 
    try: 
     raise ValueError() 
    except ValueError as e: 
     print(e) 

    import sys; print(sys.exc_info()) 

は今fooを呼び出すと例外が保たれている例を示します

foo() 
(<type 'exceptions.ValueError'>, ValueError(), <traceback object at 0x7f45c57fc560>) 

Exceptionをクリアするには、sys.exc_clear()に電話する必要があります。

def foo(): 
    try: 
     raise ValueError() 
    except ValueError as e: 
     print(e) 
    import sys; print(sys.exc_info()) 

同じ関数を呼び出す:逆にPythonの3では

foo()  
(None, None, None) 
関連する問題