python try expect_Python基础23 捕获异常 try-except

1 #异常

2

3 #捕获异常

4 #try-except语句

5 #基本语法格式为

6 #try:

7 #

8 #excep[异常类型]:

9 #

10 #注意:

11 #一个try模块可能伴随多个except模块

12 #如果except不指定[异常类型]的话

13 #except就会接收所有异常类型

14

15 importdatetime as dt16 #导入Python内置datetime时间模块并取别名dt

17 defread_date(in_date):18 #建立这个函数的目的是

19 #将导入的字符串格式化成日期

20 try:21 date=dt.datetime.strptime(in_date,"%Y-%m-%d")22 #四位数的年 月份 月内中的一天

23 returndate24 #而这里data的类型也变成了datatime

25 exceptValueError:26 print("处理ValueError异常")27 str_date = "2020-10-24"

28 print("日期={0}".format(read_date(str_date)))29 #所以这里的代码的意思是,将str_date传输给read_date验证并转化成datetime数据

30 #然后再将其返还值输出出来

31 #这里我们写一个错误的数据上去

32 #显然这里的209A不是正确的000——9999的四位数的年

33 #所以这里一定会抛出异常

34 #而且类型还是ValueError类

35 #这就和下面的except相对应了

36 #然后我们看到,直接这里的

37 #print("日期={0}".format(read_date(str_date_2)))

38 #只执行到了 -->这里

39 #而直接输出了"处理ValueError异常"

40 #而再这里执行完毕之后

41 #才继续执行的print("日期={0}".format

42 #但是这时候的read_date(str_date_2)是没有返回值的

43 #所以这个时候返还值就是None

44 str_date_2="209A-10-24"

45 print("日期={0}".format(read_date(str_date_2)))46

47 #我们还可以补充一下

48 #让它能返还异常对象

49 defread_date_2(in_date):50 try:51 date=dt.datetime.strptime(in_date,"%Y-%m-%d")52 returndate53

54 exceptValueError as error:55 #这里的 as error表示将异常对象给e

56 print("处理ValueError异常")57 print(error)58 #然后这里输出error,就会打印出异常对象的异常描述

59 str_date_2="209A-10-24"

60 print("日期={0}".format(read_date_2(str_date_2)))61 #time data '209A-10-24' does not match format '%Y-%m-%d'

62 #比如这里就描述了你这里不符合格式化所填写的格式

63

64 #补充

65 #Python中时间日期的格式化符号

66 '''

67 %y 两位数的年份表示(00-99)68 %Y 四位数的年份表示(000-9999)69 %m 月份(01-12)70 %d 月内中的一天(0-31)71 %H 24小时制小时数(0-23)72 %I 12小时制小时数(01-12)73 %M 分钟数(00=59)74 %S 秒(00-59)75 %a 本地简化星期名称76 %A 本地完整星期名称77 %b 本地简化的月份名称78 %B 本地完整的月份名称79 %c 本地相应的日期表示和时间表示80 %j 年内的一天(001-366)81 %p 本地A.M.或P.M.的等价符82 %U 一年中的星期数(00-53)星期天为星期的开始83 %w 星期(0-6),星期天为星期的开始84 %W 一年中的星期数(00-53)星期一为星期的开始85 %x 本地相应的日期表示86 %X 本地相应的时间表示87 %Z 当前时区的名称88 '''

89

90 print("///")91

92 #多except代码块

93 #还是以上面那个式子为例子

94 defread_date_3(in_date):95 try:96 date=dt.datetime.strptime(in_date,"%Y-%m-%d")97 returndate98

99 exceptValueError as error:100 #这里的 as error表示将异常对象给e

101 print("处理ValueError异常")102 print(error)103 exceptNameError as error:104 #这里的 as error表示将异常对象给e

105 print("处理NameError异常")106 print(error)107 exceptAttributeError as error:108 #这里的 as error表示将异常对象给e

109 print("处理AttributeError异常")110 print(error)111 classshuju(object):112 def __init__(self,t1,t2,t3):113 self.t1=t1114 self.t2=t2115 self.t3=t3116 #先填入一个不存在的str_date_999

117 #print("日期={0}".format(read_date_3(str_date_999)))

118 #当我们输入这个不存在的变量的时候

119 #并没有看到我们想看到的

120 #由 except返还出来的异常

121 #反而是Python本身直接报错了

122 #这是因为我们在使用这个不存在的变量的时候

123 #还来不及进入我们def中的try:后面取

124 #所以不在try中进行检测

125 #自然不会由except进行异常抛出

126 #同理我们再在这里进行测试

127

128 shuju_1=shuju(1,2,3)129 try:130 c=str_date_999131 d=shuju_1.t5132 exceptNameError as error:133 print("处理NameError异常")134 print(error)135 exceptAttributeError as error:136 print("处理AttributeError异常")137 print(error)138

139 #这一组的try和except的组合

140 #将不存在的变量赋值给c

141 #这是在try监视之下的,所以自然会经历except的异常处理

142

143 #同理,我们用except来检测AttributeError也是不行的(本例中)

144 #print("日期={0}".format(read_date_3(shuju_1.t5)))

145 #这样的异常也会在外部被处理掉

146

147 #而我们发现,如果异常返还以后

148 #会直接跳出来

149 #比如上面的代码中c和d的赋值显然两个都是错的

150 #而在执行完c的except之后关于d的就不执行了

151

152 #总结一下

153 #except类似于else,只会执行一个

154 #同时如果try中间的代码块异常,从异常的那行代码开始

155 #后面的try代码块就不会执行了

156

157 #补充

158 #try-except后面可以加上else,类似于while else for else

159 try:160 c=shuju_1.t1161 except : #这里什么都不填,表示所有异常都接收

162 print("有错误")163 else:164 print("放屁,没错误")165

166 #补充2

167 #try-except-finally

168 #在try-except后面补上以后finally

169 #表示虽然在try模块中间因为异常的抛出

170 #导致后面部分代码不能运行,但是我最后还是要运行一遍finally

171 try:172 c=shuju_1.t10173 except : #这里什么都不填,表示所有异常都接收

174 print("有错误")175 else:176 print("放屁,没错误")177 finally:178 print("错了和没错没啥区别,反正要运行我")179 #有错误,不运行else 但是运行了finally

180

181 try:182 c=shuju_1.t2183 except : #这里什么都不填,表示所有异常都接收

184 print("有错误")185 else:186 print("放屁,没错误")187 finally:188 print("错了和没错没啥区别,反正要运行我")189 #没错误,运行了else finally还是运行了

190

191 print("//")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值