• 《Rubu基础教程第五版》第十章笔记 错误处理和异常


    异常错误的分析

    Traceback (most recent call last):
    	1: from new_point.rb:64:in `<main>'
    new_point.rb:27:in `[]': out of range '2' (ArgumentError)
    

     这么一条异常 from 文件名:行号:in 方法名

    文件名:行号:in 方法名:错误信息 (异常的类型)

    异常处理的写法

    begin   rescue end   相当于Python中try except

    一个异常的小脚本

    shijianongdeMBP:chapter_10 shijianzhong$ cat wc.rb 
    ltotal=0    # 行数统计
    wtotal=0    # 单词数统计
    ctotal=0    # 字数统计
    ARGV.each do |file|
      begin
        input = File.open(file)
        l = 0  # 文件内统计
        w = 0 
        c = 0
        input.each_line do |line|
          l += 1
          c += line.size
          line.sub!(/^s+/,"")   # 删除行首的空白符
          ary = line.split(/s+/)
          w += ary.size
          end
          input.close
          printf("%8d %8d %8d %s
    ",l,w,c,file)
          ltotal += l
          wtotal += w
          ctotal += c
      rescue => ex
        print ex.message, "
    "
      end
    end
    

    后处理

    begin resuce => 变量 ensure end

    try except finally

    重试,一个蛮有意思的玩意

    file = ARGV[0]
    begin
      io = File.open(file)
    rescue
      sleep
      retry    (重试)
    end
    

    rescue修饰符

    表达式1 rescue 表达式2

    n = Integer(val) rescue 0

    如果第一个报错,那取值就是0

    异常处理语法补充

    方法内部,类内部begin~end可以省略begin与end,直接用rescue以及ensure就可以了

    指定需要捕捉的异常

    begin

       ...

    rescue Exception1, Exception2 => 变量

      处理

    resuce Exception3 => 变量

    处理

    end

    自定义异常类

    自定义的错误类继承与StandardError类。

    MyError = Class.new(StandardError)

    MyError1 = Class.new(MyError)

    这样的自定义错误类第一个,其实跟下面这个写法一样

    class MyError < StandardError

    end

    主动抛出异常

    raise "xxxx"

    抛出 RuntimeError异常,并在新生成的异常对象中设置作为信息的字符串

    raise 异常类

    抛出指定类的异常

    raiise 异常类 "xxxx"

    抛出指定类的异常,并在新生成的异常对象中设置作为信息的字符串

    raise

    抛出 RuntimeError异常

    常见的错误信息

    syntax error 语法错误

    NameError/NoMethodError 变量名或者方法不存在

    ArgumentError 方法传参错误

    TypeError  对象方法错误

    LoadError  require 无法读取到指定的库

  • 相关阅读:
    java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä'...解决
    Dos命令查看端口占用及关闭教程
    IDEA中Tomcat启动出现乱码
    ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
    MySQL 面试问题分析总结
    深入Cpython (编写一个Cpython 模块)
    使用docker构建简约高效的镜像
    深入理解C
    ELK 起航
    jquery
  • 原文地址:https://www.cnblogs.com/sidianok/p/13022870.html
Copyright © 2020-2023  润新知