例外とエラー¶
この章では、利用可能なすべての例外をアルファベット順にリストアップします。
- class ArithmeticError¶
様々な算術エラーのために発生する組込み例外の基本クラスです。
- class AssertionError¶
assert 文が失敗したときに発生します。
- class AttributeError¶
属性の参照や代入が失敗した時に発生します。
- 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が発生します。
- 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()
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.")