AttributeError の解決: Python で 'Nonetype' オブジェクトに属性 'Group' がありません

Fariba Laiq 2023年6月21日
  1. Python での AttributeError: 'NoneType' object has no attribute 'group' の原因
  2. try-except を使用して Python で AttributeError: 'NoneType' object has no attribute 'group' を解決する
  3. if-else を使用して Python で AttributeError: 'NoneType' object has no attribute 'group' を解決する
AttributeError の解決: Python で 'Nonetype' オブジェクトに属性 'Group' がありません

Python 正規表現 (regex) は、特殊文字またはパターンの文字列を照合して抽出します。 Python では、正規表現が指定された文字列と一致しない場合、正規表現 AttributeError: 'NoneType' object has no attribute 'group' が発生します。

この記事では、このタイプのエラーに対する可能な解決策を見ていきます。

Python での AttributeError: 'NoneType' object has no attribute 'group' の原因

クラスまたはデータ型を定義するときはいつでも、そのクラスに関連付けられた属性にアクセスできます。 しかし、定義したクラスが所有していないオブジェクトの属性またはプロパティにアクセスするとします。

その場合、'NoneType' オブジェクトに属性 'group' がない という AttributeError が発生します。 NoneType は、None 値を含むオブジェクトを参照します。

このタイプのエラーは、最初に変数を none に設定した場合にも発生します。 次のプログラムは、単語の先頭にある大文字の F を検索するプログラムです。

コード例:

# Python 3.x
import re

a = "programmig is Fun"
for i in a.split():
    b = re.match(r"\bF\w+", i)
    print(b.group())

出力:

#Python 3.x
AttributeError                            Traceback (most recent call last)
C:\Users\LAIQSH~1\AppData\Local\Temp/ipykernel_2368/987386650.py in <module>
      3 for i in a.split():
      4     b=re.match(r"\bF\w+", i)
----> 5     print(b.group())

AttributeError: 'NoneType' object has no attribute 'group'

このエラーは、正規表現が最初の反復で文字列内の指定された文字と一致しないために発生します。 したがって、group() にアクセスすると、コンパイラは AttributeError を表示します。これは、None 型のオブジェクトに属しているためです。

try-except を使用して Python で AttributeError: 'NoneType' object has no attribute 'group' を解決する

このエラーを解消する 1つの方法は、コードで例外処理を使用することです。 このようにして、except ブロックがエラーを処理します。

前のプログラムを考えてみましょう。次のように try-except ブロックを追加します。

コード例:

# Python 3.x
import re

a = "programmig is Fun"
for i in a.split():
    b = re.match(r"\bF\w+", i)
    try:
        print(b.group())
    except AttributeError:
        continue

出力:

#Python 3.x
Fun

これで、プログラムが正常に動作することがわかりました。 continue キーワードは、b が何も返さない場所をスキップするためにここで使用され、次の繰り返しにジャンプし、F で始まる単語を検索します。

したがって、Fun という用語が出力に表示されます。

if-else を使用して Python で AttributeError: 'NoneType' object has no attribute 'group' を解決する

'NoneType' object has no attribute 'group' エラーを回避するもう 1つの簡単な解決策は、プログラムで if-else ステートメントを使用することです。 次のプログラムは、文字列内の 1 から 5 までの数字をチェックします。

正規表現に一致する番号がないため、AttributeError になります。 しかし、if-else ブロックを使用すると、エラーを回避できます。

条件が満たされない場合、else ブロック内のステートメントは、一致するものが見つからないときに実行されます。

# Python 3.x
import re

a = "foo bar 678 baz"
x = r".* ([1-5]+) .*"
matches = re.match(x, a)
if matches:
    print(matches.group(1))
else:
    print("No matches!")

出力:

#Python 3.x
No matches!
著者: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

関連記事 - Python Error