Python学习--Day 17

130.异常

  • 语法错误和异常
    老师讲的、简单的、不正式的理解就是:在pycharm中,没运行的时候看不到,程序运行的时候报出来的xxxError。
  • 异常处理:按照如下的格式书写:
try:
	可能出现异常的代码
except:
	如果有异常执行的代码
[finally:
	无论是否存在异常都会被执行的代码] # 可有可无
  • 举例:使用try将异常可能出现的代码包含在内
def func():
    try:
        s1 = int(input('please input 1st number:'))
        s2 = int(input('please input 2nd number:'))
        sum = s1 + s2
        print(sum)
    except:
        pass
func()
  • 举例2:出现具体的问题,使用Except将对应的异常类型放在后面,并将代码内容放在里面。
def func():
    try:
        s1 = int(input('please input 1st number:'))
        s2 = int(input('please input 2nd number:'))
        sum = s1 / s2
        print(sum)
    except ZeroDivisionError: # 如果捕捉到了除0错误,就执行
        print('ZeroDivisionError')
    except ValueError: # 如果捕捉到了输入值类型错误,就执行
        print('ValueError')
func()

131.异常之多个excpet

  • 异常的归属1:object——BaseException——Exception——各种Error
    如下代码,若出现了ValueError,会被Exception捕捉,并执行相应的代码。
def func():
    try:
        s1 = int(input('please input 1st number:'))
        s2 = int(input('please input 2nd number:'))
        sum = s1 / s2
        print(sum)
    except ZeroDivisionError: # 如果捕捉到了除0错误,就执行
        print('ZeroDivisionError')
    # except ValueError: # 如果捕捉到了输入值类型错误,就执行
        # print('ValueError')
    except Exception:
        print('Exception')
func()
  • 异常的归属2:
    如下代码会有逻辑错误,因为ValueError已经被前面的Exception捕捉,后面的ValueError部分形同虚设。因此Exception等更高级的父类异常要放在最下面。
def func():
    try:
        s1 = int(input('please input 1st number:'))
        s2 = int(input('please input 2nd number:'))
        sum = s1 / s2
        print(sum)
    except ZeroDivisionError: # 如果捕捉到了除0错误,就执行
        print('ZeroDivisionError')
    except Exception: # 书写的时候要将最大的父类写在最下
        print('Exception')
    except ValueError: # 逻辑错误
        print('ValueError')
func()
  • 异常的归属3:
    如果想使用父类的Exception进行异常捕捉,又想让它具体报出错误,可以使用以下代码:
    except Exception as err:
    ____print(err)
    会将捕捉到的其他类型的报错原因变为err抛出。

132.try与else

  • else内的内容仅仅是当没有出现异常的时候才会被执行,而添加了return会跳过else,因此如果用了try-else结构,代码中就不能出现return。
    例如如下代码,因为同时使用了try-else和return,else的内容是遥不可及的,永远也不可能到达。
def func():
    try:
        s1 = int(input('please input 1st number:'))
        print(s1)
        return 1
    except ValueError:
        print('必须是数字')
        return 2
    else: # 在Pycharm中自动变黄色。
        print('try - else')

func()
  • finally的特点是,无论有没有异常都会执行;else是不报错才进行。文件操作的时候,将close()放在finally中不论是否有异常都会将资源释放。例如报错和文件操作的结合:(以及数据库的close())
try:
	文件操作
except:
	io异常错误
finally:
	stream.close() # 无论是不是有异常,都会将资源释放。
  • 当finally和return结合的时候:以如下代码为例:如果有finally,执行完try遇到try内的return,不会返回,而是等待finally执行完,如果finally内有return,就会返回finally内的return值;finally内没有return就返回try中的return值。
def func():
    stream = None
    try:
        stream  =open(r'C:\Users\10727\Desktop\q.txt')
        context = stream.read()
        print(context)
        return 1
    except Exception as err:
        print(err)
        return 2
    finally:
        print('---finally---')
        if stream:
            stream.close()
        return 3

func()
print(func())
# 输出结果是3
# 如果将finally内的return 3语句注释掉,会返回1

133.异常抛出

  • 抛出异常,raise,举例:使用raise将自己定义的异常抛出:
    基本格式:raise 自定义异常/Exception('异常说明')
def register():
    username = input('please input your name:')
    if len(username)<6:
        raise Exception('MUST HAVE SIX OR MORE CHARACTERS')
    else:
        print('OK!')
register()
  • 使用try结合raise,将自定义的异常使用try捕捉。
try:
	register()
except Exception as err:
	print(err)
	print('F')
else:
	print('OK')
# 输出结果:
# MUST HAVE SIX OR MORE CHARACTERS
# F
  • 异常‘分类’:系统扔异常(占到90%)、自定义异常

134.回顾

  • 回顾昨天的内容
    文件操作:os.path:dirname()、join()、split()、splitext()、getsize()、isabs()、isdir()、isfile();os:getcwd()、chdir()、listdir()、mkdir()、rmdir()、remove()

  • 异常的内容:语法错误与异常的区别(大概理解就好)、系统抛出异常的基本格式、自定义异常的格式


最近会减少对该视频的学习,要新开一个numpy、pandas的学习专栏,但是不看完这个视频系列是不会放弃的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值