質問

一部の条件で次のエラーが発生するモジュールをインポートしています。     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()

ただし、常に再帰制限を変更することは強くお勧めしません。 ただし、再帰制限の非常に小さな変更が許可されています

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top