您的位置:时时app平台注册网站 > 编程知识 > 课时32:卓殊处理:你不容许三回九转没有错【时

课时32:卓殊处理:你不容许三回九转没有错【时

2019-11-03 03:23

 1、AssertionError:断言语句(assert卡塔 尔(阿拉伯语:قطر‎战败

Python管见所及非常分类与管理办法,python管理措施

Python多如牛毛至极类型差不离分为以下类:

1.AssertionError:当assert断言条件为假的时候抛出的那么些

2.AttributeError:当访问的靶子属性官样文章的时候抛出的非常

3.IndexError:超过对象索引的限量时抛出的百般

4.KeyError:在字典中追寻叁个官样文章的key抛出的不行

5.NameError:访谈二个一纸空文的变量时抛出的十二分

6.OSError:操作系统产生的充裕

7.SyntaxError:语法错误时会抛出此特别

8.TypeError:类型错误,常常是不通类型之间的操作会并发此拾分

9.ZeroDivisionError:进行数学生运动算时除数为0时会现出此万分

有关越多可怜请参谋官方文书档案:

2.7版本链接

3.6版本链接

Python卓殊管理:

例1:现身相当最简便处理措施

#!/usr/bin/python 
#coding:utf8 

#try与except结合用法 

a = 1 
b = 2 

try : 
  assert a > b     #如果a>b判断为假时将抛出AssertionError异常 
except AssertionError:  #如果捕获到AssertionError异常将执行except下面的代码块 
  print ( "a<b" ) 

地点例子输出结果为 a<b 因为在断言时a>b为假,当时会抛出AssertionError十分,当捕获到此拾分后就能够实施except代码块中的语句

例2:使用多少个except捕获万分

#!/usr/bin/python 
#coding:utf8 

#try与多个except结合用法,在try代码块中依次执行,只要捕获到异常就停止执行 

a = 1 
b = 2 
c = "1" 

try : 
  assert a < b 
  d = a   c 
except AssertionError: 
  print ( "a<b" ) 
except TypeError,e:   #这里的 e 为异常信息 
  print (e) 

地点实行的结果为 unsupported operand type(s) for : 'int' and 'str' 不扶持整型和字符串型相加,后边断言为真,所以不会见世AssertionError相当,这时继教推行上面语句,那时就涌出了TypeError非凡,当时就能够实行except TypeError上面包车型客车代码块,前边的e代表格外的错误音信,所以那边的结果是打字与印刷出非常的错误音信

例3:try与except与else的使用

#!/usr/bin/python 
#coding:utf8 

a = 1 
b = 2 
c = "1" 

try : 
  assert a < b 
  d = a   b 
except AssertionError,e: 
  print ( "a<b" ) 
except TypeError,e: 
  print (e) 
else :          #当try代码块中执行没有发现任何异常的时候执行这里的语句 
  print ( "Program execution successful" ) 

地点实行结果为

例4:try与except与else与finally结合使用(能够未有else卡塔 尔(英语:State of Qatar)

#!/usr/bin/python 
#coding:utf8 

#try与多个except结合用法,在try代码块中依次执行,只要捕获到异常就停止执行 

a = 1 
b = 2 
c = "1" 

try : 
  assert a < b 
  d = a   b 
  txt = open ( "/root/1.txt" ) 
  txt.write( "test" )    #上面打开文件默认以r方式打开,这里会抛出IOError异常 
except AssertionError,e: 
  print ( "a<b" ) 
except TypeError,e:   #这里的 e 为异常信息 
  print (e) 
except IOError,e: 
  print (e) 
else :          #当没有发现任何异常的时候执行这里的语句 
  print ( "Program execution successful" ) 
finally :         
#不管有没有民常都会执行finally代码块中的语句,通常用在打开文件,在文件处理过程过中出异常退出,这时候文件没有关闭 
  txt.close() 

Python常见卓殊类型 大约分为以下类: 1.AssertionError:当assert断言条件为假的时候抛出的相当...

Python中的相当处文学习笔记,python分外管理

Python 是面向对象的言语,所以程序抛出的非常也是类。

布满的百般类

1.NameError:尝试访谈叁个尚无表明的变量
2.ZeroDivisionError:除数为 0
3.SyntaxError:语法错误
4.IndexError:索引超过系列范围
5.KeyError:央浼叁个不设有的字典关键字
6.IOError:输入输出错误(例如你要读的文件不设有卡塔尔国
7.AttributeError:尝试访谈未知的指标属性
8.TypeError:传给函数的参数类型不得法,举个例子给 int 函数字传送入字符型

自定义非凡类

固然内建的百般类已经席卷超过一半场所,但假使急需创设和煦的老大类,能够利用上面包车型地铁办法:

复制代码 代码如下:

class CustomException(Exception): # Exception 为有着特别的基类
    # 处理极其的代码

抓获非常

复制代码 代码如下:

try: 
   # 须要张开捕获十分的代码,唯有现身至极在此以前的代码被最后履行
except (Exception1,Exception2,...) as argument: 
   # 捕获到 (Exception1,Exception2,...) 里的可怜才实行本段代码
   # argument 是贰个丰硕类的实例,包蕴格外的现实音讯
except:
   # 捕获到 (Exception1,Exception2,...) 以外的不胜实行本段代码,用 sys 模块的 exc_info() 函数能够收获非凡音讯
else: 
   # 若无捕获到充足则实行本段代码
finally: 
   # 无论是不是捕获到特别都实行本段代码

上述讲话并不都以必得的,举例 try...except...、try...finally... 大概try...except...else... 语句都以实惠的。大家还可以 用 try...except...else... 代替 if...else...。

抛出相当

即使大家想要在投机编排的主次中百尺竿头更进一步抛出极度,能够利用如下三种形式:

raise Exception(reason)

Exception 必需是贰个要命类的名称。可选项 reason 用来传递十分的音信。

assert expression[,reason]

assert 是预见的第一字。当表达式 expression 为真则什么都不做,不然抛出 AssertionError 非常。reason 提供特其余音信。

上下文物管理理器

是因为指标 File 支持上下文物管理理公约,因此能够运用下边包车型地铁点子展开文件:

复制代码 代码如下:

with open('filename') as fp:
   # 无论本段代码是或不是出现分外,文件对象 fp 均能科学关闭

Example

复制代码 代码如下:

import sys

def div(num, den):
 print('_________________   (',num,',',den,')n')
 try:
  ans = num/den
  assert den != num, 'Equal' # 断言:分子分母不等于
  den = 'Changed'            # 借使推行本语句在此以前未出现分外,改换 den 的值
  if num % 2:                # 如若分子为奇数,则抛出非凡
   raise ValueError('Odd')
 except ZeroDivisionError as e:
  print('except ... as ...nt', e)
 except:
  print('exceptnt', sys.exc_info())
 else:
  print('elsent', ans)
 finally:
  print('finallynt', den)

div(1,0) # 除数为零,为 ZeroDivisionError 万分类
div(1,1) # 分子等于分母,断言为假,抛出拾贰分
div(2,1) # 无异常
div(3,1) # 分子为奇数,通过 raise 抛出卓殊
div(3,'x') # 不归属 ZeroDivisionError 的别样卓殊

运行结果:

复制代码 代码如下:

_________________   ( 1 , 0 )

except ... as ...
  division by zero
finally
  0
_________________   ( 1 , 1 )

except
  (<class 'AssertionError'>, AssertionError('Equal',), <traceback object at 0x00000000029B42C8>)
finally
  1
_________________   ( 2 , 1 )

else
  2.0
finally
  Changed
_________________   ( 3 , 1 )

except
  (<class 'ValueError'>, ValueError('Odd',), <traceback object at 0x00000000029B42C8>)
finally
  Changed
_________________   ( 3 , x )

except
  (<class 'TypeError'>, TypeError("unsupported operand type(s) for /: 'int' and 'str'",), <traceback object at 0x00000000029B42C8>)
finally
  x

Python 是面向对象的言语,所以程序抛出的不行也是类。 经常见到的可怜类 1.NameError:尝试访谈二个...

 

>>> print "I love fishc.com"
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("I love fishc.com")?

 

 

 

当尝试访谈一个子虚乌有的变量时,Python会抛出NameError卓殊:

>>> fishc
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    fishc
NameError: name 'fishc' is not defined

 

 

file_name = input("请输入要打开的文件名:")
f = open(file_name,'r')
print("文件的内容是:")

for each_line in f:
      print(each_line)

*******************************

  大器晚成、什么是那么些?

那便是说如何是可怜呢?举个例证:

抓获极度能够用try语句达成,任何出未来try语句范围内的可怜都会被立马抓获到。try语句有三种完毕格局:大器晚成种是 try-except,另生龙活虎种是try-finally。

次第现身逻辑错误或许客户输入不合规都会挑起极度,但那么些特别实际不是沉重的,不会导致程序崩溃死掉。能够使用Python提供的那个处理机制,在非常出现的时候立时抓获,并从里头消食掉。

风度翩翩、什么是非常?

*******************

时时app平台注册网站 1时时app平台注册网站 2时时app平台注册网站 3时时app平台注册网站 4时时app平台注册网站 5时时app平台注册网站 6时时app平台注册网站 7时时app平台注册网站 8时时app平台注册网站 9

 

7、SyntaxError:Python语法错误

 

 

 

>>> my_list = [1,2,3]
>>> my_list[3]
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    my_list[3]
IndexError: list index out of range

8、TypeError:分裂门类间的无用操作

*******************************

三、课时32课后习题及答案

>>> my_list = ["小甲鱼"]
>>> assert len(my_list) > 0
>>> my_list.pop()
'小甲鱼'
>>> assert len(my_list) > 0
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    assert len(my_list) > 0
AssertionError

 

二、卓殊的下结论

9、ZeroDivisionError:除数为零

 

>>> my_list = []
>>> my_list.fishc
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    my_list.fishc
AttributeError: 'list' object has no attribute 'fishc'

目录:

******************

4、KeyError:字典中寻找二个官样文章的机要字

  三、课时32课后习题及答案

>>> 1   "1"
Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    1   "1"
TypeError: unsupported operand type(s) for  : 'int' and 'str'

这里当然倘诺客商输入的是毫无疑问的,但万生机勃勃客户输入一个空中楼阁的文件名,那么地点的代码就脆弱:

请输入要打开的文件名:我为什么是一个文档.txt
Traceback (most recent call last):
  File "C:Users14158Desktoplalallalalal.py", line 2, in <module>
    f = open(file_name,'r')
FileNotFoundError: [Errno 2] No such file or directory: '我为什么是一个文档.txt'

大家领悟了那些非常,那怎么捕获那些特别呢?

OSError看名称就会想到其意义就是操作系统一发布生的十二分,像张开八个荒诞不经的文本会掀起FileNotFoundError,而这么些FileNotFoundError即是OSError的子类。例子下边已经演示过,这里就不重复了。

地球人都通晓除数无法为零,所以除以零就能抓住ZeroDivisionError十分:

 

*******************

微微种类分歧是不能互相实行估测计算的,不然会抛出TypeError至极:

>>> my_dict = {"one":1,"two":2,"three":3}
>>> my_dict["one"]
1
>>> my_dict["four"]
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    my_dict["four"]
KeyError: 'four'

******************

若是境遇SyntaxError是Python语法的乖谬,此时Python的代码并不可能继续实施,你应该先找到并修改错误:

  二、十分的下结论

6、OSError:操作系统一发布生的可怜

5、NameError:尝试访谈多少个不设有的变量

 上边包车型大巴事例就抛出了三个FileNotFoundError的不胜,那么Python平日还是能抛出怎么着格外呢?这里给大家做总括,以后遇上这一个万分就不会目生了。

大家还记得断言语句吧?在关于分支和巡回的章节里讲过。当assert那么些首要字前面包车型客车条件为假的时候,程序将告生龙活虎段落并抛出AssertionError万分。assert语句平日是在测量试验程序的时候用于在代码中置入检查点:

3、IndexError:索引超过系列的范围

2、AttributeError:尝试访谈未知的对象属性

>>> 5/0
Traceback (most recent call last):
  File "<pyshell#15>", line 1, in <module>
    5/0
ZeroDivisionError: division by zero

本文由时时app平台注册网站发布于编程知识,转载请注明出处:课时32:卓殊处理:你不容许三回九转没有错【时

关键词: