例外とエラー

この章では、利用可能なすべての例外をアルファベット順にリストアップします。

class ArithmeticError

様々な算術エラーのために発生する組込み例外の基本クラスです。

class AssertionError

assert 文が失敗したときに発生します。

class AttributeError

属性の参照や代入が失敗した時に発生します。

class BaseException

すべての組込み例外の基本クラス。

ユーザー定義クラスから直接継承されることはありません(継承するには Exception を使ってください)。

class EOFError

input() 関数がデータを読み込まずにファイル終了条件(EOF)に当たったときに発生します。

class Exception

すべての組込み例外は、このクラスから派生します。

ユーザー定義の例外もすべてこのクラスから派生させる必要があります。

class GeneratorExit

ジェネレータまたはコルーチンが閉じられるときに発生します。

class ImportError

import 文がモジュールをロードできないときに発生します。

class IndentationError

不正なインデントに関する構文エラーの基本クラスです。

class IndexError

シーケンスの添字が範囲外の時に発生します。

class KeyboardInterrupt

ユーザーが割り込みキー(通常は Ctrl C)を押した時に発生します。

class KeyError

マッピング(辞書)のキーが既存のキーの集合の中に見つからない場合に発生します。

class LookupError

マッピングやシーケンスで使うキーやインデックスが無効な場合に発生する例外の基本クラスです。

class MemoryError

オペレーションがメモリ不足になったときに発生します。

class NameError

ローカル名やグローバル名が見つからない場合に発生します。

class NotImplementedError

ユーザー定義の基底クラスにおいて、抽象メソッドは派生クラスがメソッドをオーバーライドすることを要求するとき、またはクラスが開発されている間、本当の実装をまだ追加する必要があることを示すために、この例外を発生させる必要があります。

class OSError

この例外は、ハブ上で動作するオペレーティングシステムであるファームウェアによって発生します。 たとえば 、ポートAにモータがないのに Motor(Port.A) を呼び出すと OSError が発生します。

errno: int

どの種類の OSError が発生したかを uerrno モジュールにリストされているもので示します。

class OverflowError

算術演算の結果が大きすぎて表現できない場合に発生します。

class RuntimeError

他のどのカテゴリーにも当てはまらないエラーが検出されたときに発生します。

関連する値は、正確に何が間違っていたかを示す文字列です。

class StopIteration

組み込み関数 next() とイテレータの __next__() メソッドで、イテレータが生成するアイテムがこれ以上ないことを知らせるために発生します。

ジェネレータ関数は、これを直接発生させるのではなく、return する必要があります

class SyntaxError

パーサーが構文エラーに遭遇したときに発生します。

class SystemExit

ハブまたは Pybricks Code アプリで停止ボタンを押したときに発生します。

class TypeError

操作や関数が不適切な型のオブジェクトに適用されたときに発生します。

class ValueError

操作や関数が、型は正しいが値が不適切な引数を受け取ったときに発生します。これは IndexError のような、より正確な例外で説明できない場合に使われる。

class ZeroDivisionError

除算、剰余演算の第2引数が0の場合に発生します。

サンプルコード

REPL 端末でのデバッグ

from pybricks.pupdevices import Motor
from pybricks.parameters import Port
from pybricks.tools import wait

# モーターを初期化。
test_motor = Motor(Port.A)

# 500 deg/s で始動。
test_motor.run(500)

# ターミナルウィンドウをクリックして CTRL+C を押すと、
# このターミナルでデバッグを継続できる。
wait(5000)

# また、この操作でスクリプトを終了し、ターミナルに入ることもできる。
# グローバルスコープにある変数もそのまま利用できる。
raise KeyboardInterrupt

# たとえば、以下の行をターミナルにコピーすると、test_motor が
# まだ有効なので、角度を取得できる。
test_motor.angle()

停止ボタンが押されたときにコードを実行

from pybricks.tools import wait

print("Started!")

try:

    # ここで、通常と同じようにスクリプトを実行する。
    # この例では、何もせずにただひたすら待機する。
    while True:
        wait(1000)

except SystemExit:
    # このコードは、停止ボタンを押したときに実行されます。
    # これは、モーターをスタート位置に戻すなどの「後始末」に
    # 有効です。
    print("You pressed the stop button!")

OSError を使ったデバイスの検出

from pybricks.pupdevices import Motor
from pybricks.parameters import Port

from uerrno import ENODEV

try:
    # モーターの初期化を試す。
    my_motor = Motor(Port.A)

    # 初期化がうまくいけば、次のメッセージを見ることになる。
    print("Detected a motor.")
except OSError as ex:
    # OSError が発生した場合、ENODEV のようなどのような
    # エラーであったかを確認できます。
    if ex.errno == ENODEV:
        # ENODEVは "Error, no device" の略です。
        print("There is no motor this port.")
    else:
        print("Another error occurred.")