Python学习——语法错误与异常

错误类型

一、语法错误(Syntax errors)

  1. 代码编译时的错误,不符合Python语言规则的代码会停止编译并返回错误信息。

    发生原因:
    缺少起始符号或结尾符号(括号、引号等)
    缩进错误
    关键字拼写错误

    注:
    语法错误包含在异常基类中

二、异常(Exceptions)

  1. 异常相较于语法错误,异常比较难发现,因为它只在代码运行时才会发生
    如类型错误、数值错误、索引错误和属性错误等。

    发生原因:
    在定义函数之前就引用该函数
    调用不属于某个对象的方法或者属性
    试图将某个值转换为不恰当的数据类型

  2. 六种典型的异常
    除零错误(ZeroDivisionError):除数为0
    名称错误(NameError):变量使用前未进行申明或者初始化
    类型错误(TypeError):某些函数或者方法只适用于特定的数据类型,如果对数据类型的操作不当,就会产生类型错误
    数值错误(ValueError):在输入类型正确的情况下,具体输入值错误
    索引错误(IndexError):超出序列长度的索引操作
    属性错误(AttributeError):方法或者属性不适用该对象

    eg:
    a = 10
    #raw_input 键盘输入方法,可以设置提示
    b = int(raw_input("请输入:"))
    print a/b
    
    输出结果:
    #输入0,会出现除零错误
    
  3. 捕获异常
    (1). 代码编写环境自带的高亮显示
    便于发现常规语法错误
    但难于发现异常

    (2). 程序要遇到异常的时候,往往是直接中断,跳出执行。
    但是有些时候,我们需要在遇到异常的时候另外处理,而不是直接停止。

    解决方法:
    try…except…语句
    try关键词内执行的是正常代码,当这部分代码出错的时候,会跳过错误代码后进入except关键词内部,执行此部分的代码

    #语法:
    try:
    	#正常运行的代码
    expect:
    	#不正常运行的代码
    

    try…except…else语句
    在try…except…后加入的else指,当程序没发生错误时执行的部分

    #语法:
    try:
    	#正常运行
    expect(Exceptions1,Exceptions2,...),e:
    	#发生Exceptions1,Exceptions2,...时的处理方式
    else:
    	#正确时执行
    

    finally语句
    finally语句是指,无论程序运行对或错,都会执行的部分

    #语法:
    try:
    	#正常运行
    expect(Exceptions1,Exceptions2,...),e:
    	#发生Exceptions1,Exceptions2,...时的处理方式
    else:
    	#正确时执行
    finally:
    	#无论对错都会执行
    
    eg:
    try:
    	a = 10
    	b = int(raw_input())
    	c = a/b
    	print c
    except (BaseException),e:
    	print e
    else:
    	print "没有发生异常"
    finally:
    	print "都会执行"
    
    输出结果:
    #键盘输入1
    10
    没有发生异常
    
    #键盘输入0
    integer division or modulo by zero
    都会执行
    
  4. assert关键字

    #语法:
    assert Exceptions, e
    

    当Expression部分为True时,则正确执行,程序继续下去;当判断为False时,则抛出后面的e错误提示。
    在大型的项目中,assert常被用来作为“防御性编程”

    eg:
    assert 1 == 0, BaseException
    #结果报错,抛出异常
    
  5. 用户自定义异常
    (1). 自定义异常的原因
    Python提供的内建异常不够用
    可以预估某个错误的产生

    (2). 定义异常类继承于Exception类,由它开始扩展

    eg:
    class MyError(Exception):
    	pass
    	
    raise MyError('something error')
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值