7

いくつかの条件で次のエラーが発生するモジュールをインポートしています: RuntimeError: pyparted requires root access

インポートの前にルートアクセスをチェックするだけでよいことはわかっていますが、将来の参考のために、try/except ステートメントを介してこの特定の種類のエラーをキャッチする方法を知りたいです。この RuntimeError と発生する可能性のある他のものを区別する方法はありますか?

4

6 に答える 6

12

例外の属性をチェックして、考えられる他の例外と区別することができ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、例外の属性が非推奨になったことは注目に値します。テキストは、通常はにあります。.argsargs[0]

... 2.6 の場合、message属性は廃止され、属性が優先されargsます。

于 2009-05-05T17:17:04.470 に答える
8

インポートの前にルートアクセスをチェックするだけでよいことはわかっていますが、将来の参考のために、try/except ステートメントを介してこの特定の種類のエラーをキャッチする方法を知りたいです。この RuntimeError と発生する可能性のある他のものを区別する方法はありますか?

エラーが特定の条件によって引き起こされた場合、エラーをキャッチする最も簡単な方法は条件をテストすることだと思います。より具体的なエラーを自分で発生させることができます。この場合は環境に問題があるため、エラーがスローされる前にすべての「エラー」が存在します。

上記の内容に同意します。エラーでのテキスト マッチングは恐ろしい見通しです。

于 2009-05-05T17:56:44.843 に答える
4
try:
    import pyparted
except RuntimeError:
    print('RuntimeError is raised')
    raise

例外処理の詳細については、チュートリアル を参照してください

ImportError私の意見では、この状況が発生するはずです。そして、あなたはそれを自分で行うことができます:

try:
    import pyparted
except RuntimeError as e:
    raise ImportError(e)
于 2009-05-05T17:08:01.933 に答える
1

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()

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

于 2013-05-15T06:29:27.460 に答える
1

はい。

   try:
        import module
   except RuntimeError:
         pass

import は他のステートメントとして解釈され、特別なものではありません。あなたはすることができます

if condition:
     import module
于 2009-05-05T17:08:31.620 に答える
1
try:
   import ...
except RuntimeError:
   # Do something
于 2009-05-05T17:08:49.450 に答える