Python3 异常与断言

发布时间:2019-05-16 21:54:43编辑:auto阅读(1907)

    1.异常

    当出现错误时,程序就会发生异常

    num1=input('Please input a num1: ')
    num2=input('Please input a num2: ')
    
    print(float(num1)/float(num2))

    输入num1=3,num2=0,程序产生异常

    除了除零异常,还有许多种异常:

    ImportError:无法引入包或模块
    IndexError:下标索引超界
    NameError:使用还未赋值的变量
    SyntaxError:代码逻辑出错,不能执行
    TypeError:传入的对象类型与要求不符
    ValueError:传入一个不被期望的值,即使类型正确
    KeyError:试图访问字典里不存在的键
    IOError:输入输出异常
    ZeroDivisionError:除零
    AttributeError:尝试访问未知的对象属性

    (1)异常捕获

    使用try…except…语句来捕获异常

    num1=input('Please input a num1: ')
    num2=input('Please input a num2: ')
    try:
    	print(float(num1)/float(num2))
    except:
    	print('Error!')

    输出结果:

    也可以在except后面加上具体的异常

    num1=input('Please input a num1: ')
    num2=input('Please input a num2: ')
    try:
    	print(float(num1)/float(num2))
    except ZeroDivisionError:
    	print('Error!')

    (2)处理多个异常

    上面的例子不止会出现除零异常,如果我输入的不是数字而是字母,也会产生异常

    num1=input('Please input a num1: ')
    num2=input('Please input a num2: ')
    try:
    	print(float(num1)/float(num2))
    except ZeroDivisionError:
    	print('Error!')
    except ValueError:
    	print('Input a num!')

    输出结果:

    也可以只写一个except语句

    num1=input('Please input a num1: ')
    num2=input('Please input a num2: ')
    try:
    	print(float(num1)/float(num2))
    except (ZeroDivisionError,ValueError):    #一定要用()包起来
    	print('Error!')

    (3)else语句

    num1=input('Please input a num1: ')
    num2=input('Please input a num2: ')
    try:
    	print(float(num1)/float(num2))
    except (ZeroDivisionError,ValueError):
    	print('Error!')
    else:
    	print('Input right!')

    如果产生异常就不会执行else语句

    (4)finally语句

    num1=input('Please input a num1: ')
    num2=input('Please input a num2: ')
    try:
    	print(float(num1)/float(num2))
    except (ZeroDivisionError,ValueError):
    	print('Error!')
    else:
    	print('Input right!')
    finally:
    	print('Over!')

    不管会不会产生异常,都会执行finally语句.所以finally语句多用来收尾.

    (5)输出异常信息

    如果想要输出异常信息,并且使用默认的异常提示

    num1=input('Please input a num1: ')
    num2=input('Please input a num2: ')
    try:
    	print(float(num1)/float(num2))
    except Exception as e:
    	print(e)
    	print('Error!')
    else:
    	print('Input right!')
    finally:
    	print('Over!')

    输出结果:

    (6)抛出异常

    raise需要指定一个参数,必须是一个异常的实例或者是异常的类

    a=1
    raise ValueError('Error!')

    输出结果:

    在except里面,raise可以不用传入参数,这样会将异常再次抛出

    num1=input('Please input a num1: ')
    num2=input('Please input a num2: ')
    try:
    	print(float(num1)/float(num2))
    except Exception as e:
    	print(e)
    	raise

    输出结果:

    2.断言

    assert后面接的第一个参数应该是一个布尔表达式,如果表达式的值为True,不会中断程序,如果表达式的值为False,就会中断程序

    assert后面接的第二个参数是产生中断之后要输出的内容

    num1=input('Please input a num1: ')
    num2=input('Please input a num2: ')
    
    assert (float(num2)!=0),'Error!'
    print(float(num1)/float(num2))

    输出结果:

关键字