Pythonのpass文の意味と使い方

Pythonのpass文は何もしない文であり、文法上なにかを書く必要があるが何も実行することがないときに使います。

  1. 単純文 (simple statement) - pass文 — Python 3.6.5 ドキュメント

ここでは、

pass文の意味 pass文とcontinue文の違い

について説明したあと、具体的な用途・使い方として以下の内容を説明します。

空の関数やクラスを定義 空のファイルを作成 条件分岐で何もしないことを明示 例外処理で何もしない(例外を無視)

pass文の意味

公式ドキュメントにもあるように、pass文は何もしない文。

pass はヌル操作 (null operation) です — pass が実行されても、何も起きません。 pass は、構文法的には文が必要だが、コードとしては何も実行したくない場合のプレースホルダとして有用です。 7. 単純文 (simple statement) - pass文 — Python 3.6.5 ドキュメント

Pythonでは関数定義のdef文や条件分岐のif文などでは中身を省略することができません。なにかを記述する必要があるが、何も実行する必要がない(実行させたくない)場合にpass文を使います。

pass文とcontinue文の違い

whileやforのループで使われるcontinue文はそれ以降の処理を行わずに次のステップに進む。したがって、continue文のあとに記述された処理は実行されません。

for i in range(3):
    print(i)
    if i == 1:
        continue
        print('CONTINUE')
# 0
# 1
# 2

一方、pass文は何もしないのでpass文のあとに記述された処理が続けて実行されます。

for i in range(3):
    print(i)
    if i == 1:
        pass
        print('PASS')
# 0
# 1
# PASS
# 2

空の関数やクラスを定義

関数やクラスの定義だけ先にしておいて実装を後回しにしたい場合などに、空の関数やクラスを定義したいことがあります。 def文の中に何も書かないとエラーになります。

# def empty_func():
# SyntaxError: unexpected EOF while parsing

pass文を書いておけば何もしない空の関数を定義できます。

def empty_func():
    pass

クラスの定義でも同じ。

# class EmptyClass():
# SyntaxError: unexpected EOF while parsing

class EmptyClass():
    pass

PEP8では非推奨(E701)だが、一行だけの場合はコロン:のあとで改行せずにそのまま書いても文法上は問題ない。

Multiple statements on one line (colon) (E701)

def empty_func_one_line(): pass

class EmptyClassOneLine(): pass

空のファイルを作成

ファイルを新規作成するにはwith文と書き込みモードwのopen()を使います。

通常はwrite()メソッドなどでファイルの内容を書き込むが、pass文を使うことで空のファイルを作成できます。

with open('temp/empty.txt', 'w'):
    pass

上述のように一行で書くこともできます。

with open('temp/empty.txt', 'w'): pass

Python3.4以降はpathlibモジュールのtouch()で空ファイルを作成することもできます。

条件分岐で何もしないことを明示

条件分岐のif... elif... elseの各ブロックも中身を省略することができません。

実装を後回しにしたい場合や、何もしないことを明示したほうがコードの意図が分かりやすくなる場合などにpass文を使います。

a = 3
if a % 2 == 0:
    print('Even')
else:
    pass

例外処理で何もしない(例外を無視)

コードを実行したときにエラー(例外)が発生するとその時点でエラーメッセージが出力されて処理が終了します。

def divide(a, b):
    print(a / b)

# divide(1, 0)
# ZeroDivisionError: division by zero

try文を使うと例外を捕捉してそれに応じた処理を行うことが可能になります。例外を補足すると処理は終了せずに継続します。

def divide_exception(a, b):
    try:
        print(a / b)
    except ZeroDivisionError as e:
        print('ZeroDivisionError: ', e)

divide_exception(1, 0)
# ZeroDivisionError:  division by zero

例外を捕捉した上で特に何も処理を行わない場合はpass文を使います。例外が発生しても何もせずに処理を継続できます。

def divide_exception_pass(a, b):
    try:
        print(a / b)
    except ZeroDivisionError as e:
        pass

divide_exception_pass(1, 0)
Last Updated: 6/26/2019, 10:34:03 PM