いくつかの条件で次のエラーが発生するモジュールをインポートしています: RuntimeError: pyparted requires root access
インポートの前にルートアクセスをチェックするだけでよいことはわかっていますが、将来の参考のために、try/except ステートメントを介してこの特定の種類のエラーをキャッチする方法を知りたいです。この RuntimeError と発生する可能性のある他のものを区別する方法はありますか?
いくつかの条件で次のエラーが発生するモジュールをインポートしています: RuntimeError: pyparted requires root access
インポートの前にルートアクセスをチェックするだけでよいことはわかっていますが、将来の参考のために、try/except ステートメントを介してこの特定の種類のエラーをキャッチする方法を知りたいです。この RuntimeError と発生する可能性のある他のものを区別する方法はありますか?
例外の属性をチェックして、考えられる他の例外と区別することができRuntimeError
ます。たとえば、定義済みのメッセージ テキストと一致しない場合は、エラーを再度発生させます。
try:
import pypatred
except RuntimeError,e:
if e.message == 'RuntimeError: pyparted requires root access':
return 'pyparted - no root access'
raise
もちろん、テキストの直接比較は単なる例であり、含まれている部分文字列または正規表現を検索できます。
Python 2.6 以降.message
、例外の属性が非推奨になったことは注目に値します。テキストは、通常はにあります。.args
args[0]
... 2.6 の場合、
message
属性は廃止され、属性が優先されargs
ます。
インポートの前にルートアクセスをチェックするだけでよいことはわかっていますが、将来の参考のために、try/except ステートメントを介してこの特定の種類のエラーをキャッチする方法を知りたいです。この RuntimeError と発生する可能性のある他のものを区別する方法はありますか?
エラーが特定の条件によって引き起こされた場合、エラーをキャッチする最も簡単な方法は条件をテストすることだと思います。より具体的なエラーを自分で発生させることができます。この場合は環境に問題があるため、エラーがスローされる前にすべての「エラー」が存在します。
上記の内容に同意します。エラーでのテキスト マッチングは恐ろしい見通しです。
try:
import pyparted
except RuntimeError:
print('RuntimeError is raised')
raise
例外処理の詳細については、チュートリアル を参照してください。
ImportError
私の意見では、この状況が発生するはずです。そして、あなたはそれを自分で行うことができます:
try:
import pyparted
except RuntimeError as e:
raise ImportError(e)
RuntimeError他のどのカテゴリにも当てはまらないエラーが検出されたときに発生します
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()
ただし、再帰制限を変更することは常に強く推奨されませんが、再帰制限の非常に小さな変更は許可されています
はい。
try:
import module
except RuntimeError:
pass
import は他のステートメントとして解釈され、特別なものではありません。あなたはすることができます
if condition:
import module
try:
import ...
except RuntimeError:
# Do something