「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。目下、データ分析・語学に力点を置いています。今月(2022年10月)からは多忙につき、日々の投稿数を減らします。

MENU

Pythonをゆっくりていねいに学ぶ(その09/X)

 Pythonを真面目にゆっくり学ぶべく

を参考に学んでいきます*1

4. Pyの皮:コード構造

4.11 名前の中のアンダースコア

 先頭および末尾の双方が__(アンダースコア2個)であるような名前は\mathrm{Python}が使う変数として予め予約されている。たとえば\mathrm{function.}__\mathrm{name}__および\mathrm{function.}__\mathrm{doc}__がある。

####################
### __を含む名前 ###
####################

def function():
    '''docstring'''
    print('この関数の名前:',function.__name__)
    print('docstring:',function.__doc__)

function()

4.12 エラー処理とtry, except

 \mathrm{Python}は基本的に関数の戻り値がエラーである場合、例外を返す。
 例外が起きそうな場所にはすべて例外処理を追加しユーザーに何が起こるのかを知らせるのが\mathrm{good\ practice}とされている。プログラム内で独自の例外ハンドラを用意できていない場合、\mathrm{Python}はエラーメッセージとエラー発生個所に関する情報を出力しプログラムを強制終了する。

##########################
### Pythonにおける例外 ###
##########################

# たとえばエラーを起こすもの
short_list = [1,2,3]
position = 5

print(short_list[position])


 エラー発生が分かっているのであれば、たとえば\mathrm{try,}\mathrm{except}で例外処理を行う。

##########################
### Pythonにおける例外 ###
##########################

# エラー発生が分かっているのであれば、try, exceptで例外処理
try:
    short_list[position]
except:
    print('Position must be between 0 and ',len(short_list)-1,' but got ', position)


### 例外の詳細情報を明記したい場合
# except exceptiontype as name

short_list = [1,2,3]

while True:
    value = input('Position [q to quit]? ')
    if value == 'q':
        break
    try:
        position = int(value)
        print(short_list[position])
    except IndexError as err:
        print('Bad index:',position)
    except Exception as other:
        print('Something else broke:', other)

4.12 独自例外の作成

 前節で導入した例外は標準ライブラリで定義済みのものを用いた。ここでは例外型を自分で定義する。例外はクラスであり、\mathrm{exception}で定義する。

##########################
### 独自の例外型を定義 ###
##########################

# 大文字(upper)だと例外
class UppercaseException(Exception):
    pass

words = ['eeenie', 'meenie', 'miny', 'MO']

for word in words:
    if word.isupper():
        raise UppercaseException(word)

*1:第2版が出ているものの初版しか持っていないのでこちらで。

プライバシーポリシー お問い合わせ