python异常介绍

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

1、异常

                例如:

                def
fetcher(obj,index):

                                return
obj[index]

                def
catcher():

                                try:

                                                fetcher(x,4)

                                except
IndexError:

                                                print(‘got exception‘)

                                print(‘continuing‘)

2、引发异常

                raise
IndexError

3、用户定义的异常: 用户定义的异常继承自内置异常类Exception

                class
Bad(Exception):

                                pass

4try/finally

                如果try部分没有发生异常,则finally中部分会执行,finally后面也会执行。如果try部分发生异常,则在finally中的部分会执行,finally后面部分不执行。

5try/except/else语句

                try:

                                statement

                except
name1:

                                statements

                except
(name2,name3):

                                statements

                except
name4 as data:

                                statements

                except
:

                                statements

                else#没有发生异常时,执行这部分

                                statements

                解释

                except:   #捕获所有异常

                except
name: 捕获特定异常

                except
name,value:  捕获所列异常和额外的数据

                except
(name1,name2): 捕获列出的异常

                except
(name1,name2) value: 捕获列出的异常,并取得额外的数据

                else:  如果没有发生异常,就运行

                finally:  总是会运行此代码

               

               

                Exception的异常几乎与一个空的except具有相同的效果,但是忽略和系统退出相关的异常:

                try:

                                ation()

                except
Exception:

                                ...

6、统一try/except/finally语句

                try:

                                main-action

                except
Exception1:

                                handler1

                except
Exception2:

                                handler2

                else:

                                else-block

                finally:

                                finally-block

                无论发生什么,当main-action代码完成时,而任何引发的异常都已处理后,finally-block就会被执行。事实上,即使异常处理器或者else-block内部有错误发生而引发的新的异常,finally-block内部代码依然会执行

                就像往常一样,finally字句并没有终止异常,当finally-block执行时,如果异常还在,就会在finally-block代码执行后继续传递。而控制权会跳至程序其他地方(到另外一个try,或者默认顶层处理器)如果finally执行时,没有异常处于激活状态,控制权就会在整个try语句之后继续执行。

7raise语句

                raise
<instance>  #抛出一个类的实例

                raise
<class>     #产生一个类的实例并抛出

                raise                                       
#重新抛出最近最常用的异常

                例如:

                raise 
IndexError   #class (instance create)

                raise 
IndexError               #instance(create in statement)

               

                如果一个try包含了一个名为except
name as X:字句,变量x将会分配给引发中提供的实例:

                try
:

                                ...

                except
IndexError as X:  #x被赋予成IndexError的实例

                                ...

                利用raise传递异常

                raise语句不包括异常名称或额外数据值时,就是重新引发当前异常。如果需要捕捉异常和处理一个异常,又不希望异常在程序中死掉时,一般就会使用这种形式。

                例如:

                try:

                                raise
IndexError(‘spam‘)

                except
IndexError:

                                print(‘propagating‘)

                                raise

                通过这种方式执行raise时,会重新引发异常,并将其传递给更高层的处理器(或者顶层的默认处理器,他会停止程序,打印标准错误消息)     。

8、python3.0异常链:raise 
from

                raise
exception from
otherexception

                当使用from的时候,第二个表达式指定了另一个异常类或实例,他会附加到引发异常的__cause__属性。如果引发的异常没有捕获,python把异常也作为标准出错信息的一部分打印出来。

9assert语句

                assert
<test>,<data>

                1assert语句用来声明某个条件是真的。

                2、如果你非常确信某个你使用的列表中至少有一个元素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。

                3、当assert语句失败的时候,会引发一AssertionError。

10、with/as环境管理器

                在python2.6和python3.0中引入了一种新的异常相关的语句

                如果想在python2.5中使用的话,必须使用如下语句来激活

                from
__future__ import
with_statement

                基本使用

                with expression [as varible]:

                                with-block

11、环境管理协议

                1、计算表达式,所得到的对象称为环境管理器,它必须有__enter__和 __exit__方法

                2、环境管理器的__enter__方法会被调用,如果as字句存在,其返回值会赋值给as子句中的变量,否则抛弃。

                3、代码嵌套代码会执行

                4、如果with代码块引发异常,__exit__(type,value,traceback)方法会被调用.这些也是由sys.exc_info返回相同的值。否则 异常会终止。正常情况下异常应该重新引发,这样的话才能传递到with语句之外

                5、如果with代码没有引发异常,__exit__方法依然会被调用,其type,value以及traceback参数都会以 None传递

                例如:

                class
TraceBlock:

                                def        
message(self,arg):

                                                print(‘running‘,arg)

                                def
__enter__(self):

                                                print(‘starting with block‘)

                                                return
self

                                def
__exit__(self,exc_type,exc_value,exc_tb):

                                                if
exc_type is
None:

                                                                print(‘exited normally\n‘)

                                                else:

                                                                print(‘raise an exception!‘,exc_type)

                                                                return
False

                with TraceBlock() as action:

                                action.message(‘test 1‘)

                                print(reached)

                with TraceBlock() as action:

                                action.message(‘test 2‘)

                                raise
TypeError

                                print(‘not reached‘)

12、内置Exception类

                BaseException   异常的顶级根类。这个类不能当作用户定义的类直接继承(使用Exception)。它提供了子类所继承的默认的打印和状态保持行为。如果在这个类的一个实例上调用str内置函数时,该类返回创建实例的时候所传递的构造函数的显示字符串(如果没有参数的话,返回一个空字符串),此外除非子类替换了这个类的构造函数,在实例构造时候传递给这个类的所有参数都将作为一个元组存储在args属性中

                Exception            与应用相关的异常的顶层超类。这是BaseException的一个直接子类,并且是所有其他内置异常类的超类,除了系统退出实践之类(SystemExit.KeyboardInterrupt和GenatorExit)。几乎所有用户定义的类都应该继承自这个类,而不是BaseException。当遵循这个惯例的时候,在一条try预计的处理器中指名Exception,确保你的程序将捕获出系统退出事件之外的所有异常,通常该事件是允许通过的。实际上,Exception变成了try预计中的一个全捕获,并且比一条空的Except更精确。

                ArithmeticError   所有数值错误的超类(并且是Exception的一个子类)

                OverflowError   识别特定数值错误的子类

  

时间: 2024-10-08 07:35:37

python异常介绍的相关文章

python 异常知识点

raise from python 在3.0 之后引入了raise from 表达式: raise exception from otherexception 当使用该语法时,第二个表达式指定了另一个异常类或实例,它会附加到引发异常的__cause__属性 注意: python3.0不再支持raise Exc,Args形式,而该形式在Python2.6中仍然可用,在Python3.0中,使用 raise Exc(Args)调用. with  as with语句格式: with expressio

【美妙的Python之中的一个】Python简单介绍及环境搭建

美妙的Python之Python简单介绍及安装         简而言之: Python 是能你无限惊喜的语言,与众不同.             1.Python:          Python英文意思为蟒蛇,故又称为蟒蛇语言,在图标设计上有所体现,贵铎·范·罗萨姆(Guido van Rossum)于1989年创立.Python的特质,简单,优雅,健壮,继承传统编程语言的强大性与通用性,同一时候兼具简单脚本的简单性.         Python的哲学:仅仅用一种方法,最好是仅仅有一种方法

Python 九、Python异常

一.python异常 1.Python异常 python运行时发生错误称作异常 语法错误:软件的结构上有错误而导致不能被解释器解释或不能被编译器编译 逻辑错误:由于不完整或不合法的输入所致,也可能是逻辑无法生成.计算或者输出结果需要的过程无法执行等 Python异常是一个对象,表示错误或意外情况 在Python检测到一个错误时,将触发一个异常 Python可以通过异常传导机制传递一个异常对象,发出一个异常情况出现的信号 程序员也可以在代码中手动触发异常 Python异常也可以理解为:程序出现了错

Python异常

异常的概念: Python运行时的错误 语法错误:软件结构上错误而导致不能被解释器解释或不能被编译器编译 逻辑错误:由于不完整或不合法的输入导致,也可能是逻辑无法生成,计算或者输出结果需 要的过程无法执行等 Python的异常是一个对象,表示错误或者意外情况 在Python检测到一个错误时,将触发一个异常 Python可以通过异常传导机制传递一个异常对象,发出一个异常情况出现的信号 程序员也可以在代码中手动触发异常 Python的异常也可以理解为:程序出现了错误而在正常控制流之外采取行为 一.解

python - day01 介绍

01. python - 介绍 python - 简单介绍:  dsadasdasdashttps://www.python.org/ftp/python/

[C#] C# 知识回顾 - 异常介绍

异常介绍 C# 语言的异常处理功能可以帮助你在处理程序运行时出现的意外或异常情况. 异常处理使用 try.catch 和 finally 等关键字尝试执行某些操作,以处理失败情况,当然,尽管这些操作也有可能失败,如果你确定需要这样做,且希望在事后清理资源,就可以尝试这样做. 公共语言运行时 (CLR)..NET 或任何第三方库或者应用程序代码都有可能会生成异常. 异常是你可以使用 throw 关键字显式进行创建. 很多情况下,异常很可能不是由代码直接调用的方法引发,而是由调用堆栈中位置更靠下的另

python 模块介绍 - Base16, Base32, Base64 数据编码

简介 功能:RFC 3548: Base16, Base32, Base64 数据编码.转换二进制数据为适合明文协议传输的 ASCII 序列.转换8bits 为每个字节包含 6,5 或 4bits 的有效数据,比如 SMTP, URL 的一部分或者 HTTP POST 的一部分.参考:RFC 3548.编码算法不同于 uuencode.类型:标准库相关模块:uu, binhex, uu, quopri Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法.由于 2 的 6 次方

笔记1:Python简单介绍

Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程.Python已经成为最受欢迎的程序设计语言之一.2011年1月,它被TIOBE编程语言排行榜评为2010年度语言.Python语法简洁而清晰,具有丰富和强大的类库,常被称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起. 人们为什么使用Python? 提高开发者效率 提高软件质量 程序的可移植性 内置

python——异常except语句用法与引发异常

except: #捕获所有异常 except: <异常名>: #捕获指定异常 except:<异常名1,异常名2):捕获异常1或者异常2 except:<异常名>,<数据>:捕获指定异常及其附加的数据 except:<异常名1,异常名2>:<数据>:捕获异常名1或者异常名2,及附加的数据库 常用异常名: 异常名    描述 AttributeError 调用不存在的方法引发的异常 EOFError     遇到文件末尾引发的异常 Impor