1

私の django ビューは list を通過し、正規表現を使用してリスト内の特定の要素を検出し、最終的にコンテンツの辞書を返します。リストの解析中にIndexErrorとの両方が発生する可能性があります。ValueError

この場合、例外を処理する必要があります。私はこのように試しました

def parse_list(oldlist):
    try:
        newlist=create_newlist(oldlist)
    except Exception as e:
        logger.debug(str(e))
    else:
        mydict = make_dict(newlist)

def create_newlist(oldlist):
    mydict = {}
    for elem in oldlist:
        if re.match('somepattern',elem[0]):
            mydict['somekey']=int(elem[0].strip())
        else:
            raise ValueError(elem[0],' expects an integer')
    ...
    return mydict

上記の関数から発生した例外を処理するためにExceptionクラスを 正しい方法で使用していますか?except Exception as e:

単体テストメソッドを書いたとき

def test_me(self):
    dl = parse_list(self.somelist)
    print 'dl=\n',dl
    self.assertTrue(len(dl),0)

コンソール出力を次のように取得しました

ERROR: test_me (myapp.tests.ParseTest)
..
IndexError: list index out of range

例外がロガーによって記録されないのはなぜですか?

4

1 に答える 1

1

上記の関数から発生した例外を処理する正しい方法として、except Exception で Exception クラスを使用していますか?

例外を処理するときは、できるだけ具体的にするようにしてください。あなたの場合、一般的な代わりにIndexErrorandをキャッチする必要があります:ValueErrorException

try:
    ...
except (ValueError, IndexError) as e:
    ...

あなたの他の質問:

例外がロガーによって記録されないのはなぜですか?

ロガーの構成によって異なります。「デバッグ」メッセージを出力していますが、レベル「エラー」以上のメッセージのみをログ/表示するように設定できます。詳細については、Python でのログのドキュメントを参照してください。

于 2012-06-21T06:29:21.220 に答える