ばぁど・うぉっちんぐ

セキュリティに強いWeb屋。自由と春を求めて羽ばたく渡り鳥。

このブログはGoogle Analyticsを利用しています

【5日目】Python勉強メモ-関数・例外処理-

Python勉強メモも5日目。

ついに平成が終わり令和になってしまいましたね。

PCの予測変換で令和が一発で出るようになっており、少々驚いている自分がおります。

というわけで、令和一発目の記事としてGW企画のPython勉強メモです。

前回はこちら

ultrabirdtech.hatenablog.com

関数

4日目までの勉強した内容は、コードを何かでまとめるということをやっていなかった。 プログラムをしていると、コードを再利用したい場面に何度も出会う。 その再利用を行うための手法として一つあるものが、この関数である。

関数は名前をつけることができるコードの塊のことで、メインの処理と切り分けて書くことができる。 関数は任意のデータ型、任意の個数の入力(引数)を取り、任意のデータ型、数の結果を出力する。

関数の定義

defキーワードを用いる。

def hoge():
     print('hoge')

defキーワードの後に関数名、入力引数を書き込む()、最後に:を書くことで関数の定義を行うことができる。 関数名は、変数名と同じ規則になる。

関数の呼び出し

関数名に()をつけることで呼び出すことが可能。

>>> hoge()
'hoge'

返り値の設定

関数に呼び出し元に値を返す場合はreturnを用いる。

文字列mogeを返却する関数moge()があるとする。

def moge():
    return 'moge'

実行すると下記のようになる。

>>> m = moge()     # moge()の返り値がmに代入される
>>> m
'moge'

引数

関数を呼び出すときに引数として値を渡すことができる。引数を渡すことで渡した引数によって関数内での処理を変えることなどが可能。

渡した引数age(年齢)で、20歳未満かどうかを確認する関数。

def check_age(age):
    if age <= 20:
        print('OK')
    else:
        print('NG')

このように関数としてまとめることによって、複数回年齢を確認する必要があった場合はこの関数を呼び出してあげるだけでいい(そもそも年齢を何回もチェックするプログラムとは?とかいう話はなし。)

例外処理(try, except)

例外とは

プログラムをしていると、例外を予知し、例外を適切に処理をしてあげる必要があるタイミングがある。 例外とは、プログラムを実行している際に起きうるエラーのことだ。

例えば、0による除算やPythonだと存在しないはずの配列要素へのアクセスだ。

例1. ゼロ除算

>>> 1 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

例2. 存在しない要素へのアクセス

>>> fruits = ['orange', 'apple', 'strawberry']
>>> fruits[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> 

例外を正しく処理してみる

上記のゼロ除算の場合、0で割るという場合を想定してプログラムをしてあげる必要がある。

例外を何も処理していなければ、システムエラーとなりプログラム自体が止まってしまうからだ。

例外を処理するためにはPythonではtryexceptを使用する。

>>> try:
>>>      1 / 0
>>> except ZeroDivisionError as error:
>>>     # エラーが発生した際の処理
>>>     print('エラーが起こったよ!!エラーは :' + str(error))
 
エラーが起こったよ!!エラーは :division by zero

このようにエラーが起こりうるソースコードtryexcept で囲った上でエラーが発生した際の処理を記述する。 今回であればエラーを通知するだけだが、エラーメッセージとして利用者に対して正しい数字(0以外の数字)を記入させるようなメッセージを表示させるなどが正しい処理だろう。

Let's Try

1. 関数で切り出すと、どのようなメリットがあるかを考えてみる

ユニットテストを関数ごとに書きやすくなる

・機能単位で関数に切り出すことで可読性を高めることができる

2. エラーにはどういう種類のエラーがあるかを調べてみる

docs.python.org

まとめ

例外処理理解できないうちは難しいですよね。

次回はこちら

ultrabirdtech.hatenablog.com