Pythonでいくつかのランタイムエラーのみをキャッチする
-
05-07-2019 - |
質問
一部の条件で次のエラーが発生するモジュールをインポートしています。 RuntimeError:pypartedにはルートアクセスが必要です
インポートの前にルートアクセスをチェックできることはわかっていますが、将来の参照のためにtry / exceptステートメントを使用してこの種のエラーをキャッチする方法を知りたいです。このRuntimeErrorと発生する可能性のあるその他のエラーを区別する方法はありますか?
解決
インポートの前にルートアクセスをチェックできることはわかっていますが、将来の参照のためにtry / exceptステートメントを使用してこの種のエラーをキャッチする方法を知りたいです。このRuntimeErrorと発生する可能性のあるその他のエラーを区別する方法はありますか?
エラーの原因が特定の条件である場合、エラーをキャッチする最も簡単な方法は条件をテストすることであり、より具体的なエラーを自分で発生させることができると思います。この場合、環境に問題があるため、エラーがスローされる前にすべての「エラー」が存在します。
上記に同意します-エラーに関するテキストマッチングは、恐ろしい見通しです。
他のヒント
他の考えられる RuntimeError
例外と区別するために、例外の属性を確認できます。たとえば、定義済みのメッセージテキストと一致しない場合、エラーを再発生させます。
try:
import pypatred
except RuntimeError,e:
if e.message == 'RuntimeError: pyparted requires root access':
return 'pyparted - no root access'
raise
もちろん、直接テキスト比較は単なる例であり、含まれている部分文字列または正規表現を検索できます。
例外の .message
属性が Python 2.6以降では非推奨です。テキストは .args
、通常は args [0]
にあります。
... 2.6では、
messages
属性は廃止され、args
属性が優先されます。
try:
import pyparted
except RuntimeError:
print('RuntimeError is raised')
raise
チュートリアルでの例外処理の詳細。
この状況では、 ImportError
私の意見では。そして、あなたは自分でそれを行うことができます:
try:
import pyparted
except RuntimeError as e:
raise ImportError(e)
はい。
try:
import module
except RuntimeError:
pass
importsは他のステートメントとして解釈され、特別なものではありません。
if condition:
import module
try:
import ...
except RuntimeError:
# Do something
RuntimeError エラーが検出されたときに発生します。 8217; t他のカテゴリのいずれかに該当する
def foo():
try:
foo()
except RuntimeError, e:
print e
print " Runtime Error occurred due to exceeded maximum recursion depth "
これは、Pythonの再帰制限の超過が原因のRuntimeErrorをキャッチする方法です
そして、再帰制限を超えて関数を呼び出したい場合は、次のことができます
import sys
def foo():
try:
foo()
except RuntimeError, e:
sys.setrecursionlimit(1200)
foo()
ただし、常に再帰制限を変更することは強くお勧めしません。 ただし、再帰制限の非常に小さな変更が許可されています