[解決!Python]pass文で何もしない文を記述するには解決!Python

Pythonには「何もしない」処理を行うpass文がある。その使いどころとちょっとした注意点を紹介する。

» 2021年10月05日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「解決!Python」のインデックス

連載目次

# 何もしない関数の定義
def myfunc():
    pass

x = myfunc()
print(x)  # None

# メソッドを何も持たないクラスの定義
class MyClass:
    pass

mc = MyClass()
print(mc.__class__.__name__)  # MyClass

# if文の節で特定の条件では何もしないことを明記
for num in range(3):
    if num % 2# odd
        print(f'{num}: odd')
    else:
        pass  # 偶数では何もしないことを明記

# 例外発生時に何もしない
while True:
    num = input('input a integer: ')
    try:
        num = int(num)
    except ValueError:
        pass
    except:
        print('something goes wrong')
    else:
        break

print(num)


pass文とは

 Pythonにはpass文という何もしない文が用意されている。そのドキュメントでは「構文法的には文が必要だが、コードとしては何も実行したくない場合のプレースホルダとして有用」とある。「構文法的には文が必要」な場面とは多くの場合、複合文のことだ。複合文の記述時に「実際にどんなコードにするかは後回しにしよう」「ここでは何もしないことを明記しよう」などの理由で何もしない文が必要になったときにpass文を使用する。

 例えば次のような使いどころが考えられる(全てが上で述べたように複合文であることに注意)。

  • 何もしない関数の定義
  • メソッドを何も持たないクラスの定義
  • if文の節で特定の条件では何もしないことを明記
  • 例外捕捉時に何もしないことを明記

 以下に例を示す。

何もしない関数の定義

 関数を定義だけしておいて、実装は後から考えようというときにpass文を使える。

def myfunc():
    pass

x = myfunc()
print(x)  # None


 この時点では、myfunc関数は何もしない関数であり、その戻り値はNoneである(=戻り値はない)。後からちゃんと役立つコードを記述する必要がある。

 なお、同様な関数をラムダ式で定義するなら「lambda : None」となる。

def call_func(f):
    result = f()
    print(result)

call_func(lambda : None# None
call_func(myfunc)  # None


メソッドを何も持たないクラスの定義

 何もしない(メソッドを何も持たない)クラスは次のようになる。

class MyClass:
    pass

mc = MyClass()
print(mc.__class__.__name__)  # MyClass


 何かの機能や処理を試すコードを書いていて、ユーザー定義のクラスが取りあえず必要になったときや、関数と同じくクラスの実装は後回しにしたいときなどに、このようなクラスを定義できる(後者の場合はもちろん、後からちゃんとした実装が必要になる)。

if文の節で特定の条件では何もしないことを明記

 if文のif節やelse節、elif節のいずれかで何の処理もしないときにpass文を記述できる。以下に例を示す。

for num in range(3):
    if num % 2# odd
        print(f'{num}: odd')
    else:
        pass  # 偶数では何もしないことを明記

# 出力結果:
#1: odd


 このコードは0、1、2の整数値について奇数なら出力をして、偶数なら何も処理をしない。すぐに分かる通り、else節は書かなくても問題ないが、何らかの理由から「この条件が成立したときには何もしない」ことを明記したいのであれば、このような使い方が考えられる。

例外発生時に何もしない

 例外発生時に何もしないときには該当する例外を捕捉するexcept節にpass文を記述すればよい。以下に例を示す。

while True:
    num = input('input a integer: ')
    try:
        num = int(num)
    except ValueError:
        pass
    except:
        print('something goes wrong')
    else:
        break

print(num)


 この例では、ユーザーが入力した文字列を整数に変換しているが、それを整数に変換できないときにはValueError例外が発生する。ValueError例外を捕捉するexcept節にはpass文があるので意味のある処理は何も行わず処理は継続されるが、上記のコードはwhile Trueによる無限ループとなっているので、もう一度ユーザーに整数値の入力が求められる。整数値が入力されればelse節に制御が移り、ループが終了する。

 このように例外を握りつぶすのは、そうした行為が問題ないことが明らかな場合のみとするべきだろう。なお、上記のコードは次のようにも書ける。

while True:
    num = input('input a integer: ')
    try:
        num = int(num)
    except ValueError:
        continue
    except:
        print('something goes wrong')
    break

print(num)


注意点

 pass文は何もしない文であって、その次に何かの処理があれば制御はそこに移る。例えば、先ほどのif文の例でelse節にあるpass文に続けて何かの処理を書いたとしよう。

for num in range(3):
    if num % 2# odd
        print(f'{num}: odd')
    else:
        pass  # 偶数では何もしないことを明記
        print(f'{num}: even')

# 出力結果:
#0: even
#1: odd
#2: even


 このように記述すると、pass文で「何もしない」処理をした後に、続けてprint関数呼び出しが行われる。pass文は何もしない文であって、その後の制御の流れについては何の影響も与えないことは覚えておこう。

「解決!Python」のインデックス

解決!Python

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。