2017-05-03 4 views
0

私はライブラリをロードするこのコードを持っていますが、それは消滅します。私はtry/exceptパスでそれを囲んだが、それでも死ぬ。誰もがエラーを乗り越えると、以下のprint文を継続する方法を知っています:ロードされたCライブラリのPythonでのエラーを除いて

 try: 
     library.load("test_data/polo.lib") 
     except: 
     pass 

    defines = library.get_defines() 
    print defines 
    assert (len(defines) == 3), "Make sure we have 3 defines" 

私は、右のコードのlibrary.load行の後に取得エラーは、次のとおりです。

scci18910> python test_001_library.py 
Loading library test_data/polo.lib 
terminate called after throwing an instance of 'std::string' 
Abort 
+0

あなたは 'library.load'が何をしているかを明確にする必要があります。そのコードがどのようにCライブラリのpolo.libをPythonでロード/ラップするかは、エラーをどのように捕らえるべきかにとって非常に重要です。 – innisfree

+0

私は "test_data/polo.lib"が強制的にアプリケーションの終了を行っていると思います。このライブラリを調べて、動作させる必要があります。 –

答えて

0

あなたカントキャッチ例外なぜなら、Pythonの例外はスローされないからです。 しかし、あなたはAbortバイパスするサブプロセスを使用することができます。

library.load("test_data/polo.lib") 
print(library.get_defines()) 

その後:

import subprocess 

try: 
    defines = parse_string_to_list_somehow(subprocess.check_output('python', '-c', 'list_defines.py')) 
except CalledProcessError as e: 
    print('Library defines list failed', e) 
    defines = [] 

P.S.

はファイルlist_defines.pyを作成例はpython3のためです

+1

サブプロセス呼び出しでPythonラッパーをラップしようとすると、PythonラッパーをCライブラリに邪魔するのはなぜでしょうか。単にサブプロセスがいくつかのCプログラムを呼び出さないのはなぜでしょうか。これはうまくいくかもしれませんが、この問題に対する標準的な解決策ではありません。 – innisfree

+0

おそらく正しいですが、展開要件はわかりません。 – denz

+0

ありがとう、Denz!私はPython 2.7で作業しています。同等のものは何でしょうか? –

関連する問題