主页
论坛
新帖
最新消息
新帖
最新动态
制作互助群
登录
注册
Toggle sidebar
Toggle sidebar
菜单
安装应用
安装
回复主题
【进站必读】宝可饭堂社区全局规定v1.10
关于坚决维护同人创作社群秩序与共识的公告
论坛
独立开发
进阶教程
【ESS】10 异常处理
禁用JavaScript。为了获得更好的体验,请在运行之前启用浏览器中的JavaScript。
您正在使用一款已经过时的浏览器!部分功能不能正常使用。
请尝试升级或使用
其他浏览器
。
信息
<blockquote data-quote="小语咒?" data-source="post: 2325" data-attributes="member: 123"><p><h3>10: 异常处理</h3><p>在编程过程中,错误是不可避免的。处理这些错误,以防止程序崩溃,提供有用的错误信息或尝试解决问题,这就是异常处理的目的。</p><p></p><h3>基本异常处理</h3><p>Ruby 提供了 begin-rescue 结构来处理异常。基本的语法如下:</p><p></p><p>[code=ruby]</p><p>begin</p><p> # 可能会发生异常的代码</p><p>rescue</p><p> # 处理异常的代码</p><p>end</p><p>[/code]</p><p></p><p>例如:</p><p></p><p>[code=ruby]</p><p>begin</p><p> # 尝试除以零</p><p> result = 10 / 0</p><p>rescue</p><p> # 捕获并处理异常</p><p> print "除数不能为零!"</p><p>end</p><p>[/code]</p><p></p><p>这个代码尝试执行 10 除以 0,这会引发一个异常。rescue 块会捕获这个异常并输出一条错误信息,而不是让程序崩溃。</p><p></p><h3>捕获特定的异常</h3><p>你可以捕获特定类型的异常,而不仅仅是所有的异常。Ruby 中的异常类是层次结构的,可以捕获不同层次的异常。</p><p></p><p>[code=ruby]</p><p>begin</p><p> result = 10 / 0</p><p>rescue ZeroDivisionError</p><p> print "除数不能为零!"</p><p>rescue StandardError</p><p> print "发生了一个标准错误!"</p><p>end</p><p>[/code]</p><p></p><p>在这个例子中,我们明确捕获 ZeroDivisionError 异常。如果发生其他类型的异常,第二个 rescue 会捕获它。</p><p></p><h3>获取异常信息</h3><p>在 rescue 块中,你可以访问异常对象以获取更多信息:</p><p></p><p>[code=ruby]</p><p>begin</p><p> result = 10 / 0</p><p>rescue ZeroDivisionError => e</p><p> print "错误信息: #{e.message}"</p><p> print "错误类型: #{e.class}"</p><p>end</p><p>[/code]</p><p></p><h3>ensure 块</h3><p>ensure 块中的代码无论是否发生异常都会执行。它通常用于清理资源,如关闭文件或网络连接:</p><p></p><p>[code=ruby]</p><p>begin</p><p> file = File.open("example.txt", "w")</p><p> # 可能会发生异常的代码</p><p>rescue</p><p> print "处理异常..."</p><p>ensure</p><p> file.close if file</p><p> print "文件已关闭"</p><p>end</p><p>[/code]</p><p></p><h3>raise 语句</h3><p>你可以使用 raise 语句手动引发异常:</p><p></p><p>[code=ruby]</p><p>def divide(a, b)</p><p> raise ArgumentError, "除数不能为零" if b == 0</p><p> a / b</p><p>end</p><p></p><p>begin</p><p> divide(10, 0)</p><p>rescue ArgumentError => e</p><p> print "错误: #{e.message}"</p><p>end</p><p>[/code]</p><p></p><h3>自定义异常</h3><p>你可以创建自定义的异常类来处理特定的错误情况:</p><p></p><p>[code=ruby]</p><p>class CustomError < StandardError</p><p>end</p><p></p><p>def do_something_risky</p><p> raise CustomError, "发生自定义错误"</p><p>end</p><p></p><p>begin</p><p> do_something_risky</p><p>rescue CustomError => e</p><p> print "捕获自定义错误: #{e.message}"</p><p>end</p><p>[/code]</p><p></p><h3>重新引发异常</h3><p>有时你捕获异常后,处理一些事情并希望重新引发它:</p><p></p><p>[code=ruby]</p><p>begin</p><p> result = 10 / 0</p><p>rescue ZeroDivisionError => e</p><p> print "捕获到错误: #{e.message}"</p><p> raise # 重新引发异常</p><p>end</p><p>[/code]</p></blockquote><p></p>
[QUOTE="小语咒?, post: 2325, member: 123"] [HEADING=2]10: 异常处理[/HEADING] 在编程过程中,错误是不可避免的。处理这些错误,以防止程序崩溃,提供有用的错误信息或尝试解决问题,这就是异常处理的目的。 [HEADING=2]基本异常处理[/HEADING] Ruby 提供了 begin-rescue 结构来处理异常。基本的语法如下: [code=ruby] begin # 可能会发生异常的代码 rescue # 处理异常的代码 end [/code] 例如: [code=ruby] begin # 尝试除以零 result = 10 / 0 rescue # 捕获并处理异常 print "除数不能为零!" end [/code] 这个代码尝试执行 10 除以 0,这会引发一个异常。rescue 块会捕获这个异常并输出一条错误信息,而不是让程序崩溃。 [HEADING=2]捕获特定的异常[/HEADING] 你可以捕获特定类型的异常,而不仅仅是所有的异常。Ruby 中的异常类是层次结构的,可以捕获不同层次的异常。 [code=ruby] begin result = 10 / 0 rescue ZeroDivisionError print "除数不能为零!" rescue StandardError print "发生了一个标准错误!" end [/code] 在这个例子中,我们明确捕获 ZeroDivisionError 异常。如果发生其他类型的异常,第二个 rescue 会捕获它。 [HEADING=2]获取异常信息[/HEADING] 在 rescue 块中,你可以访问异常对象以获取更多信息: [code=ruby] begin result = 10 / 0 rescue ZeroDivisionError => e print "错误信息: #{e.message}" print "错误类型: #{e.class}" end [/code] [HEADING=2]ensure 块[/HEADING] ensure 块中的代码无论是否发生异常都会执行。它通常用于清理资源,如关闭文件或网络连接: [code=ruby] begin file = File.open("example.txt", "w") # 可能会发生异常的代码 rescue print "处理异常..." ensure file.close if file print "文件已关闭" end [/code] [HEADING=2]raise 语句[/HEADING] 你可以使用 raise 语句手动引发异常: [code=ruby] def divide(a, b) raise ArgumentError, "除数不能为零" if b == 0 a / b end begin divide(10, 0) rescue ArgumentError => e print "错误: #{e.message}" end [/code] [HEADING=2]自定义异常[/HEADING] 你可以创建自定义的异常类来处理特定的错误情况: [code=ruby] class CustomError < StandardError end def do_something_risky raise CustomError, "发生自定义错误" end begin do_something_risky rescue CustomError => e print "捕获自定义错误: #{e.message}" end [/code] [HEADING=2]重新引发异常[/HEADING] 有时你捕获异常后,处理一些事情并希望重新引发它: [code=ruby] begin result = 10 / 0 rescue ZeroDivisionError => e print "捕获到错误: #{e.message}" raise # 重新引发异常 end [/code] [/QUOTE]
验证
皮卡丘这只宝可梦在全国图鉴中的编号是?(2位纯数字)
回复帖子
最新帖子
全
我想切换视角讲述故事
最新更新:全民制作人
星期三,21:43
开发问题
Z
将GBA打包成APK
最新更新:zheyeyeye
星期三,21:27
GBA教程
Z
【进站必读】宝可饭堂社区全局规定v1.10
最新更新:z1652646304
星期三,20:25
公告规定
雨
pokeemerald怎么改箱子数
最新更新:雨落天晴
星期二,10:16
开发问题
[讨论]什么契机导致你想做游戏的
最新更新:A原翼
星期一,00:12
其他相关讨论
论坛统计
主题
559
消息
2,422
成员
3,879
最新成员
stonezz
联系我们
QQ
2201858342
邮箱
pokefans@qq.com
论坛
独立开发
进阶教程
【ESS】10 异常处理
顶部