note.nkmk.me

Pythonのpass文の意味と使い方

Date: 2018-09-27 / tags: Python

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

ここでは、

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

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

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

pass文の意味

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

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

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

pass文とcontinue文の違い

whileforのループで使われる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)だが、一行だけの場合はコロン:のあとで改行せずにそのまま書いても文法上は問題ない。

def empty_func_one_line(): pass

class EmptyClassOneLine(): pass

空のファイルを作成

ファイルを新規作成するにはwith文と書き込みモードwopen()を使う。

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

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

上述のように一行で書くことも可能。

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

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

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

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

a = 3
if a % 2 == 0:
    print('Even')
else:
    pass
source: pass_if.py

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

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

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)

例外処理についての詳細は以下の記事を参照。

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事