sonoshouのまじめなブログ

情報系大学生からのウェブ見習い人生の記録

python復習まとめ5

リスト内包

リスト内包は、シーケンス型(リスト、ディクショナリ、タプル)から
リストを生成する簡単な表記です。
よくある使い方としては、あるシーケンスの要素それぞれに何らかの処理を加えて
新しいシーケンスを生成したり、
ある条件にかなう要素のみを取り出してサブシーケンスを生成するという使い方があります。

#リストの要素を2倍にする
>>> list = [1,2,3,4,5]
>>> [v * 2 for v in list]
[2, 4, 6, 8, 10]

#リスト内の文字列の空白を削除する
>>> fruitlist = ["  banana ", "   orange ", "apple     "]
>>> [fruit.strip() for fruit in fruitlist]
['banana', 'orange', 'apple']

#文字列にも適用可能である
>>> moji = "hogefuga"
>>> print [char for char in moji]
['h', 'o', 'g', 'e', 'f', 'u', 'g', 'a']

例外処理

文や式が構文的に正しい場合でも、
実行しようとするとエラーが起きることがある。
実行中に検知されるエラーは例外と呼ばれるが、
これは必ずしも致命的なものではない。
pythonでは、予め起こりうる例外を予測し、例外に応じて処理を
書くことができる。
また、正しく例外を処理できた場合、エラーを抜けて
プログラムを続けることが可能である。

まずはソースコードから。

def devide(x, y):
  try:
    if(x == 0): raise NameError #(3)
    result = x / y
  except ZeroDivisionError:     #(2)
    print"can't devide by zero"
  except NameError:             #(3)
    print "NameError"
  except:
    print "Error"               #(4)
  else:
    print "result = ",result    #(1)
  finally:
    print

if __name__ == "__main__":
  devide(2,1) #(1)
  devide(2,0) #(2)
  devide(0,2) #(3)
  devide('a','b') #(4)

プログラムの説明

-try節の中に例外が起こりえる処理を記述する。

  • except節で起きた例外に応じた処理を記述する。
  • else節はtry節で例外が起きなかった場合に適用される。
  • raiseは任意の例外をプログラマが呼び出したい時に用いる。
  • finally節はtry節で例外が起こったかどうかに関わらず、適用される。後処理などを書くことが多い。