zoukankan      html  css  js  c++  java
  • Python3 学习第三弹:异常情况如何处理?

    python 的处理错误的方式:

    1> 断言

        assert condition
        相当于 
        if not condition:
            crash program
        断言设置的目的就是因为与其让程序晚点崩溃,不如直接设置错误情况,让它直接崩溃
        >>> age = -1
        >>> assert 0 < age < 100
        AssertionError

    2> raise语句

        通过raise可以引发异常
        >>> raise Exception
        Traceback (most recent call last):
          File "<pyshell#173>", line 1, in <module>
            raise Exception
        Exception
        >>> raise Exception('overload')
        Traceback (most recent call last):
          File "<pyshell#174>", line 1, in <module>
            raise Exception('overload')
        Exception: overload
    
        此外常见的内建异常类有:
        Exception                  所有异常的基类
        AttributeError             特性应用或赋值失败时引发
        IOError                    试图打开不存在的文件时引发
        IndexError                 在使用序列中不存在的索引时引发
        KeyError                   在使用映射不存在的键时引发
        NameError                  在找不到名字(变量)时引发
        SyntaxError                在代码为错误形式时引发
        TypeError                  在内建操作或者函数应用于错误类型的对象是引发
        ValueError                 在内建操作或者函数应用于正确类型的对象,但是该对象使用不合适的值时引发
        ZeroDivisionError          在除法或者摸除操作的第二个参数为0时引发

    3> 捕捉异常

        try:
            x = input()
            y = input()
            print(x/y)
        except ZeroDivisionError:
            print("Division by Zero")
        类似这样try/except形式就是来捕捉可能发生的异常错误,一旦出现ZeroDivisionError错误信息,则运行except ZeroDivisionError之后的代码
    
        通过多个except来捕捉不同错误信息
            def calc(expr):
                try:
                    return eval(expr)
                except ZeroDivisionError:
                    print("Divison by zero")
                except TypeError:
                    print('This is not a number?')
        一个块捕捉多个错误信息
            def calc(expr):
                try:
                    return eval(expr)
                except (ZeroDivisionError, TypeError):
                    print("Input has some bugs")
        打印错误信息
            def calc(expr):
                try:
                    return eval(expr)
                except (ZeroDivisionError, TypeError) as error:
                    print(error)
        对于其他错误信息处理
            def calc(expr):
                try:
                    return eval(expr)
                except ZeroDivisionError:
                    print("Divison by zero")
                except:
                    print('haha, something unknown happened!')
        else语句用于不出现错误信息
            def calc(expr):
                try:
                    return eval(expr)
                except ZeroDivisionError:
                    print("Divison by zero")
                else:
                    print("Oh, it goes well!")
    
        此外还有finally语句,无论是否错误均会执行
    
        实际应用:(输入表达式直到可以计算)
        while True:
            try:
                print(eval(input()))
            except:
                print('Please reinput until you input the correct expression!')
            else:
                break;
            finally:
                print('I love the world whatever!') #即使else中break也会执行finally

     4> 常见错误

    BaseException
     +-- SystemExit
     +-- KeyboardInterrupt
     +-- GeneratorExit
     +-- Exception
          +-- StopIteration
          +-- StandardError
          |    +-- BufferError
          |    +-- ArithmeticError
          |    |    +-- FloatingPointError
          |    |    +-- OverflowError
          |    |    +-- ZeroDivisionError
          |    +-- AssertionError
          |    +-- AttributeError
          |    +-- EnvironmentError
          |    |    +-- IOError
          |    |    +-- OSError
          |    |         +-- WindowsError (Windows)
          |    |         +-- VMSError (VMS)
          |    +-- EOFError
          |    +-- ImportError
          |    +-- LookupError
          |    |    +-- IndexError
          |    |    +-- KeyError
          |    +-- MemoryError
          |    +-- NameError
          |    |    +-- UnboundLocalError
          |    +-- ReferenceError
          |    +-- RuntimeError
          |    |    +-- NotImplementedError
          |    +-- SyntaxError
          |    |    +-- IndentationError
          |    |         +-- TabError
          |    +-- SystemError
          |    +-- TypeError
          |    +-- ValueError
          |         +-- UnicodeError
          |              +-- UnicodeDecodeError
          |              +-- UnicodeEncodeError
          |              +-- UnicodeTranslateError
          +-- Warning
               +-- DeprecationWarning
               +-- PendingDeprecationWarning
               +-- RuntimeWarning
               +-- SyntaxWarning
               +-- UserWarning
               +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning
  • 相关阅读:
    Java 蓝桥杯 算法训练 貌似化学
    Java 蓝桥杯 算法训练 貌似化学
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    JAVA-蓝桥杯-算法训练-字符串变换
    Ceph:一个开源的 Linux PB 级分布式文件系统
    shell 脚本监控程序是否正在执行, 如果没有执行, 则自动启动该进程
  • 原文地址:https://www.cnblogs.com/Mathics/p/4007883.html
Copyright © 2011-2022 走看看