zoukankan      html  css  js  c++  java
  • python-异常处理

    错误与异常

    Error错误:

    • 语法错误,在编译代码阶段就能检测出来;
    print(aaa
    if :
    
    • 逻辑错误,在执行过程中显现出来。
    num=input("请输入数字:")
    get_sum=1+int(num)  #当输入的是一个字符串aaa时,int("aaa")就会发生逻辑错误
    

    Exception异常:

    在执行代码的过程发生的中断程序的事件,一个异常标识一种错误。例如:

    print("aaa")
    print(name)
    print("end")
    

    输出: 在执行到第二个print的时候name没有定义,报错。
    image

    常用异常:

    AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
    IOError 输入/输出异常;基本上是无法打开文件
    ImportError 无法引入模块或包;基本上是路径问题或名称错误
    IndentationError 语法错误(的子类) ;代码没有正确对齐
    IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
    KeyError 试图访问字典里不存在的键
    KeyboardInterrupt Ctrl+C被按下
    NameError 使用一个还未被赋予对象的变量
    SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    TypeError 传入对象类型与要求的不符合
    UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
    导致你以为正在访问它
    ValueError 传入一个调用者不期望的值,即使值的类型是正确的
    
    其他异常
    ArithmeticError
    AssertionError
    AttributeError
    BaseException
    BufferError
    BytesWarning
    DeprecationWarning
    EnvironmentError
    EOFError
    Exception
    FloatingPointError
    FutureWarning
    GeneratorExit
    ImportError
    ImportWarning
    IndentationError
    IndexError
    IOError
    KeyboardInterrupt
    KeyError
    LookupError
    MemoryError
    NameError
    NotImplementedError
    OSError
    OverflowError
    PendingDeprecationWarning
    ReferenceError
    RuntimeError
    RuntimeWarning
    StandardError
    StopIteration
    SyntaxError
    SyntaxWarning
    SystemError
    SystemExit
    TabError
    TypeError
    UnboundLocalError
    UnicodeDecodeError
    UnicodeEncodeError
    UnicodeError
    UnicodeTranslateError
    UnicodeWarning
    UserWarning
    ValueError
    Warning
    ZeroDivisionError
    

    异常处理

    概念

    什么是异常处理?

    python解释器检测到错误,触发异常(也允许程序员自己触发异常)
    程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)
    如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理。

    语法

    异常处理的语法:

    • if判断
    # num=input("请输入数字:")
    # if num.isdigit():
    #     get_sum=1+int(num)
    #     print(get_sum)
    # else:
    #     print("输入有误")
    
    • python特定的异常处理语法

    1)基础的 try except

    num=input("请输入数字:")
    try:
        get_sum=1+int(num)
        print(get_sum)
    except ValueError:  
        print("输入有误")  #只有触发ValueError异常时,才会走到这里
    

    2)多分支异常

    s1 = 'hello'
    try:
        int(s1)
    except IndexError as e:
        print(e)
    except KeyError as e:
        print(e)
    except ValueError as e:
        print(e)
    

    3)万能异常Exception
    可以匹配绝大多数情况的异常,最好打印出异常的错误说明。

    s1 = 'hello'
    try:
        int(s1)
    except Exception as e:
        print(e)
    

    4)多分支+万能异常
    将能预料到的异常类型放到分支里面处理,剩下的情况再用万能异常匹配处理。

    dic={"11":"aa","22":"2"}
    try:
        print(dic["key"])
    except NameError:
        print("NameError错误")
    except KeyError:
        print("KeyError错误")
    except ValueError:
        print("ValueError错误")
    except Exception as e:
        print(e)
    

    5)else的使用
    try中的代码正常执行,没有异常的时候会执行else中的代码。try except else固定连用

    dic={"11":"aa","22":"2"}
    try:
        print(dic["11"])
    except KeyError:
        print("KeyError错误")
    except ValueError:
        print("ValueError错误")
    else:
        print("good")
    

    6)finally的使用
    无论是否有异常,或突然退出,都会执行finally中的内容,可用于资源回收

    def get_file():
        try:
            f = open("test.log")
            # exit()
    		return f.read()  #return或者exit()都会执行finally
        except Exception as e:
            pass
        finally:
            print("执行finally")
            f.close()
    get_file()
    

    7)主动抛异常 raise

    raise ValueError  #主动抛出ValueError的异常
    
    s1 = 'hello'
    try:
        int(s1)
    except Exception:
        print("value类型错误")
        raise      #抛出匹配到此分支的错误类型
    

    8)自定义异常
    一般代码面向的对象是程序员,而不是用户时,才有可能自定义异常。

    class MydefError(Exception):
        def __init__(self,msg):
            self.msg=msg
        def __str__(self):
            return self.msg
    
    # raise MydefError("我说它错了,它就错了")
    
    try:
        raise MydefError("我说它错了,它就错了")
    except MydefError as e:
        print(e)
    

    9)断言 assert
    用法:assert ,功能和if类似,但是assert 定格写,下面的程序也无需缩进。
    只有满足assert True时,下面的程序才会执行。通常用于整个大程序的逻辑判断,符合则继续执行,不符合,则不执行后续全部代码。

    print("start")
    assert True
    # assert False
    print("aaa")
    

    总结:python中异常处理常用语法:

    try except
    try except else
    try except else finally
    try/except/finally
    try/finally
    
  • 相关阅读:
    C#
    C#
    C#
    创建一个ROS包
    创建一个工作空间
    ROS的文件系统
    单一职责原因
    策略模式
    UML类图
    简单工厂模式
  • 原文地址:https://www.cnblogs.com/huandada/p/15343417.html
Copyright © 2011-2022 走看看