プログラミング入門からビットコインを自動売買

プログラミング入門からビットコインを自動売買

プログラミング経験なしでBTCFXbot作成します

Python(パイソン)でのエラー処理

Python(パイソン)のエラー

f:id:bellatty2010:20180616100425j:plain

 

co-nuts.net

プログラミングをしてるとどうしてもでてくるエラー。

 

予期せずエラーが出ると終了して動かなくなることがあります。

エラーメッセージを読むことでどのようなエラーが出たか、どう対処すればいいかが分かります。

 

そこでエラーの種類やエラーメッセージの読み方について紹介します。

 

 

エラーと例外

Python(パイソン)には2種類のエラーがあります。

構文エラーと例外がPython(パイソン)のエラーになります。構文エラーとは書いたプログラムが間違って発生するエラーのことです。

 

構文エラー 

構文エラーとはどういうエラーかというと下記のようなエラーです。

SyntaxError: 'return' outside function

このように「SyntaxError 」から始まっているエラーや「IndentationError」などが構文エラーになります。

構文エラーが出た時は、「:」コロンが抜けてたり、インデックスがおかしかったりしますのでエラーが出てるところをもう一度確認します。

 

コピペしてると結構インデックスがおかしいときが多いです。インデックスが半角4つのところが、全角2つなっていたりしたらエラーがでますね。

例外

プログラム自体は正しいけど、実行するとエラーが起こるのが例外です。

@Itというサイトに例外の出し方がのっていたので出してみましたが、Pythonの例外はかなり多かったです。

気になる方は@Itにのってる下のコードを実行してみてください。

def getsubcls(cls, n=0):
    if n == 0:  # 最初だけ特別にインデントなしでクラス名を表示
        print(cls.__name__)

    for subcls in cls.__subclasses__():  # 指定されたクラスの派生クラスを反復する
        print('  ' * (n+1), subcls.__name__, sep='')  # インデント付きでクラス名表示
        getsubcls(subcls, n + 1)  # そのクラスが派生クラスを持っていればそれらを表示

getsubcls(BaseException)

 

主な例外です

Pythonのドキュメントから

ZeroDivisionError: division by zero

 割り算をするときに0で割ってしまった。

NameError: name 'spam' is not defined

 'spam'って変数はないよ。

TypeError: must be str, not int

 int型じゃなくて、str型でしょう。

 

他にも

  • IndexError: 例として(a, b,c)のリストがあり'c'を取り出すために[3]とすると、リスト内には0~2までしかないのでエラーが出る
  • KeyError: 辞書の中に指定したキーが入っていない
  • ValueError: 値が間違っている
  • ImportError: ディレクトリ内にインポートされてない。pipインストールした場合、他のディレクトリに入っていることがある。

まとめ

間違えずにプログラミングをすることは絶対に無理なので、エラーが出た時の処理をきちんとできるようにならないといけないですね。

while Trueで永遠にループさせる場合には、例外処理をしないと止まってしまいます。