17

次のコードを使用しようとしています。

try:
    clean = filter(None, re.match(r'^(\S+) (.*?) (\S+)$', full).groups())
except TypeError:
    clean = ""

ただし、次のトレースバックが表示されます...

Traceback (most recent call last):
  File "test.py", line 116, in <module>
    clean = filter(None, re.match(r'^(\S+) (.*?) (\S+)$', full).groups())
AttributeError: 'NoneType' object has no attribute 'groups'

この問題を回避する正しい例外/正しい方法は何ですか?

4

5 に答える 5

18
Traceback (most recent call last):
  File "test.py", line 116, in <module>
    clean = filter(None, re.match(r'^(\S+) (.*?) (\S+)$', full).groups())
AttributeError: 'NoneType' object has no attribute 'groups'

どのエラーを処理するかを示します: AttributeError

次のいずれかです。

try:
    clean = filter(None, re.match(r'^(\S+) (.*?) (\S+)$', full).groups())
except AttributeError:
    clean = ""

また

my_match = re.match(r'^(\S+) (.*?) (\S+)$', full)
my_match = ''
if my_match is not None:
     clean = my_match.groups()
于 2013-10-25T16:57:39.480 に答える
0

try、catch を使用して AttributeError を処理することは、はるかにクリーンなソリューションだと思います。行に対して実行された変換が非常に高価な操作になる場合があります。例えば

match = re.match(r'^(\S+) (.*?) (\S+)$', full)

一致が None でない場合: clean = filter(None, match.groups()) そうでない場合: clean = ""

上記の場合、正規表現が部分的な結果を提供するように、行の構造が変更されました。そのため、今では match は none ではなく、AttributeError 例外がスローされます。

于 2015-11-19T03:01:18.997 に答える