异常处理
在执行程序时,可能会发生各种异常(错误),如果不进行处理,则停止程序的执行。 要避免这种情况并继续沿着替代路径执行,可以使用try/catch运算符。
Try/catch运算符允许您检查异常并正确处理可能会破坏程序的结果。 例如,在下面的代码中,计算平方根的函数通常会引发异常。 通过在它周围放置一个try/catch块,可以避免这种情况。 如何处理此异常的选择,是否注册它,返回占位符值,或者,如下面的情况,输出指令是由开发人员做出的。 在决定如何处理不可预见的情况时,请记住,使用try/catch块比使用条件分支要慢得多。
In [ ]:
try
sqrt("ten")
catch e
println("Вы должны ввести числовое значение")
end
Try/catch运算符还允许您在变量中保存异常。 下面做作的例子计算第二个元素x的平方根,如果x被索引,否则它假设x是一个实数,并返回它的平方根。:
In [ ]:
sqrt_second(x) = try
sqrt(x[2])
catch y
if isa(y, DomainError)
sqrt(complex(x[2], 0))
elseif isa(y, BoundsError)
sqrt(x)
end
end
Out[0]:
我们输出执行sqrt_second函数的结果:
In [ ]:
println(sqrt_second([1 4]),
"\n", sqrt_second([1 -4]),
"\n", sqrt_second(9))
在某些情况下,可能不仅需要处理异常,还需要在try块成功执行时运行一些代码。 为此,在catch块之后,可以指定else,该块在以前未发出错误时运行。:
In [ ]:
x = []
try
x = read("file.txt", String) # для проверки работы try/catch замените название файла на любое другое
catch
println("Файл не был прочитан")
else
println(x)
end
关键字finally提供了一种运行某些代码的方法,无论它如何在try块中结束。 例如,您可以确保在下一个代码单元格中关闭打开的文件。:
In [ ]:
f = open("file.txt","w")
try
write(f, "Hello world") # измените текстовую запись и проверьте перезаписанный файл
finally
close(f)
end;