异常分类

异常类型 Exception 是进行异常处理的重要信息传递工具,所有内置的错误类型都是 Exception 的子类型。

名称描述
ArgumentError给定的参数不符合人为规定
AssertionError断言失败
Base.IOError流操作出错
BoundsError进行索引操作时越界
CompositeException描述(可能由线程带来)的多个错误
DimensionMismatch多维数组操作时维度不统一
DivideError除以 0
DomainError给定的参数超过某个范围,如 sqrt(-1)
EOFError流中无法读入更多数据
ErrorException泛化的错误
InexactError类型转化时无法解决的不精确问题
InitError模块使用 __init__ 初始化时抛出的错误
InterruptException进程被终端阻塞
KeyError对字典或集合访问/删除不存在的键
LoadErrorincluderequireusing 时抛出的错误
Meta.ParseError表达式解析失败
MethodError调用的函数不具有指定方法(由参数类型决定)
MissingException在不支持 missing 的情况下遇到了 missing
OutOfMemoryError系统或垃圾收集器无法承载内存消耗
OverflowError表达式结果对于指定类型太大
ReadOnlyMemoryError尝试在只读区域写入数据
SegmentationFault段错误,可能是指针偏移
StackOverflowError栈溢出,函数多级调用开销过大(通常是错误地进行了无限递归)
StringIndexError参阅
SystemError调用系统 API 时出错
TaskFailedException线程运行失败
TypeError类型断言失败
UndefKeywordError给函数传额外参数时漏传
UndefRefError访问未定义的某物品或字段
UndefVarError当前作用域中某量未定义

练习

猜测一下代码会导致什么类型的错误结果(或者不会发生错误),并验证:

  • NaN/0

  • 1÷0

  • [1, 2, 3, 4][8]

  • \"cat\"/0

  • foo() = foo(); foo()

  • [1 2; 3 4] - [1, 1, 1, 1]

  • \"猫猫\"[2]

  • Dict(0 => 1)[1]

  • @assert 1==0

  • typeassert(0.0, Int)