从决定不参加培训班开始 到现在已经四个月了 期间做了很多笔记 可能不怎么好 还是传到知乎吧 自己回头看也好
Python3
1 基础语法
1.1 编码
默认情况下,Python 3 源码文件以 UTF-8
1.2 标识符
- 第一个字符必须是字母或者是下划线_
- 标识符的其他部分由字母,数字和下划线组成
- 标识符对大小写敏感
1.3 保留字
保留字即关键字,我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
1.4 注释
# 第一个注释
# 第二个注释
'''
第三注释
第四注释
'''
"""
第五注释
第六注释
"""
print ("Hello, Python!")
1.5 行与缩进
python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {},pycharm中设置四个空格,以tab键缩进
1.6 变量
Python 变量命名规则:
- 变量名必须以字母或下划线字符开头
- 变量名称不能以数字开头
- 变量名只能包含字母数字字符和下划线(A-z、0-9 和 _)
- 变量名称区分大小写(age、Age 和 AGE 是三个不同的变量)
请记住,变量名称区分大小写
2 运算符
2.1 算术运算符
运算符描述实例+加 - 两个对象相加15 + 16 = 31-减 - 得到负数或是一个数减去另一个数16 - 15 = 1*乘 - 两个数相乘或是返回一个被重复若干次的字符串2*2 = 4/除 - x 除以 y5 / 2 = 2.5%取模 - 返回除法的余数5 % 2 = .......1**幂 - 返回x的y次幂5**2 = 5x5 = 25//取整除 - 向下取接近除数的整数9 // 2 >>>>2
2.2 比较运算符
以下假设变量a为10,变量b为20:
运算符描述实例==等于 - 比较对象是否相等(a == b) 返回 False。!=不等于 - 比较两个对象是否不相等(a != b) 返回 True。>大于 - 返回x是否大于y(a > b) 返回 False。<小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。(a < b) 返回 True。>=大于等于 - 返回x是否大于等于y。(a >= b) 返回 False。<=小于等于 - 返回x是否小于等于y。(a <= b) 返回 True。
2.3 赋值运算符
以下假设变量a为10,变量b为20:
运算符描述实例=简单的赋值运算符c = a + b 将 a + b 的运算结果赋值为 c+=加法赋值运算符c += a 等效于 c = c + a-=减法赋值运算符c -= a 等效于 c = c - a*=乘法赋值运算符c *= a 等效于 c = c * a/=除法赋值运算符c /= a 等效于 c = c / a%=取模赋值运算符c %= a 等效于 c = c % a**=幂赋值运算符c = a 等效于 c = c
2.4 位运算符
运算符描述实例&按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0同真为真|按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。一真为真^按位异或运算符:当两对应的二进位相异时,结果为1~按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1一起取反
2.5 成员运算符
运算符描述实例in如果在指定的序列中找到值返回 True,否则返回 False。x 在 y 序列中 , 如果 x 在 y 序列中返回 True。not in如果在指定的序列中没有找到值返回 True,否则返回 False。x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。
2.6 身份运算符
身份运算符用于比较两个对象在内存地址当中的存储单元
运算符描述实例isis 是判断两个标识符是不是引用自一个对象x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 Falseis notis not 是判断两个标识符是不是引用自不同对象x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。
2.7 运算符优先级
以下表格列出了从最高到最低优先级的所有运算符:
运算符描述**指数 (最高优先级)~ + -按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)* / % //乘,除,取模和取整除+ -加法减法>> <<右移,左移运算符&位 'AND'^ |位运算符<= < > >=比较运算符== !=等于运算符= %= /= //= -= += *= **=赋值运算符is is not身份运算符in not in成员运算符not and or逻辑运算符
3 数据类型
3.1 标准数据类型
Python3 中有六个标准的数据类型:
- Number(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Set(集合)
- Dictionary(字典)
Python3 的六个标准数据类型中:
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
3.2 数字
Python3 支持 int、float、bool、complex(复数)。
Python3中把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们可以和数字相加。
内置的 type() 函数可以用来查询变量所指的对象类型。
>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
此外还可以用isinistance来判断,还可以判断继承关系
>>>a = 111
>>> isinstance(a, int)
True
>>> class A:
... pass
...
>>> class B(A):
... pass
>>> isinstance(B(), A)
True
Python 支持三种不同的数值类型:
- 整型(Int)
- 浮点型(float)
- 复数( (complex))
数学函数
函数返回值(描述)abs(x)返回数字的绝对值,如abs(-10) 返回 10ceil(x)返回数字的上入整数,如math.ceil(4.1) 返回 5fabs(x)返回数字的绝对值,如math.fabs(-10) 返回10.0floor(x)返回数字的下舍整数,如math.floor(4.9)返回 4pow(x,y)x**y 运算后的值。round(x , [,n])返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。sqrt(x)返回数字x的平方根。
随机数函数
随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。
Python包含以下常用随机数函数:
choice(seq)从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。randrange ([start,] stop [,step])从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1random()随机生成下一个实数,它在[0,1)范围内。seed([x])改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。shuffle(lst)将序列的所有元素随机排序uniform(x, y)随机生成下一个实数,它在[x,y]范围内。sample(lst,k)对lst序列中随机获取k个元素,作为一个片段返回
3.3 String字符串
Python中的字符串用单引号 ' 或双引号 " 括起来,同时使用反斜杠 转义特殊字符。
字符串的截取的语法格式如下:变量[头下标:尾下标]
Python 字符串不能被改变。向一个索引位置赋值,比如word[0] = 'm'会导致错误。
注意:
- 1、反斜杠可以用来转义,使用r可以让反斜杠不发生转义。
- 2、字符串可以用+运算符连接在一起,用*运算符重复。
- 3、Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。
- 4、Python中的字符串不能改变。
Python转义字符
转义字符描述(在行尾时)续行符反斜杠符号n换行v纵向制表符t横向制表符r回车f换页
字符串格式化
符号描述%s格式化字符串,print "string=%2s" % string # output: string=hello%d格式化整数,print "num=%3d" % num # output: num= 14%f格式化浮点数字,可指定小数点后的精度-------------print('num=%0.2f'%5.344),保留两位小数f'hello {name}'使用f ' ', ' '内填入字符串,{ }内填入变量的名字.format'{0} {1} {0}' .foramt(),{ }内不指定位置,按默认顺序
字符串内建函数
序号方法描述1capitalize()将字符串的第一个字符转换大写2center(width,fillchar)返回一个指定的宽度width居中的字符串,fillchar为填充的字符,默认的空格3count(str,beg=0,end=len(string))返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数4endswith(suffix, beg=0, end=len(string))检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.5find(str,beg=0,end=len(string))检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-16index(str,beg=0,end=len(string))跟find()方法一样,只不过如果str不在字符串中会报一个异常.7isdigit()如果字符串只包含数字则返回 True 否则返回 False..8islower()如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False9isupper()如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False10join()以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串11ljust(width,fillcahr)返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。12lstrip()截掉字符串左边的空格或指定字符。13replace(old,new,[,max])把 将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。14spit(str=' ' ,num=string.count(str))num=string.count(str))以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串15swapcase()将字符串大写转换为小写,小写转换为大写16upper()转换字符串中的小写字母为大写17zfill()返回长度为 width 的字符串,原字符串右对齐,前面填充0
3.4 列表
List(列表) 是 Python 中使用最频繁的数据类型。
列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
列表截取的语法格式如下:变量[头下标:尾下标]
注意:
- 1、List写在方括号之间,元素用逗号隔开。
- 2、和字符串一样,list可以被索引和切片。
- 3、List可以使用+操作符进行拼接。
- 4、List中的元素是可以改变的
访问列表中的值
list1 = ['Google', 'Runoob', 1997, 2000];
list2 = [1, 2, 3, 4, 5, 6, 7 ];
print ("list1[0]: ", list1[0])
print ("list2[1:5]: ", list2[1:5])
更新列表
将新的值复制给指定的列表的下标: list[5] = 1998
删除列表元素
del list[2]
Python列表函数
序号方法描述1list.append()在列表末尾添加新的对象(对象可以为列表,元组)2list.count()统计某个元素在列表中出现的次数3list.extend()在列表末尾一次性追加另一个序列中的多个值(用新列表来拓展原来的列表)4list.index(obj)从列表中找出某个值第一个匹配项的索引位置5list.insert(index,obj)将对象插入列表6list.pop([index=-1])移除列表中的一个元素(默认最后一个元素),并且返回该元素的值7list.remove(obj)移除列表中某个值的第一个匹配项8list.reverse(obj)反向列表中元素9list.sort(key=None,reverse=False)对原列表进行排序10list.clear()清空列表11list.copy复制列表
3.5 元组
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
注意:
- 1、与字符串一样,元组的元素不能修改。
- 2、元组也可以被索引和切片,方法一样。
- 3、注意构造包含 0 或 1 个元素的元组的特殊语法规则。
- 4、元组也可以使用+操作符进行拼接
元组可以使用下标来访问元组中的值
元组中的元素值是不允许修改的
元组中的元素值是不允许删除,单我们可以使用del 语句来删除整个元组
3.6 Set集合
集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
基本功能是进行成员关系测试和删除重复的元素
可以使用{ }或者set()函数创建集合,注意:创建一个空集合必须用set()而不是{ },因为 { } 是用来创建一个空字典。
1 添加元素
s.add(x) 添加元素x到集合中
s.update(x) x参数可以是列表,元组,字典
2 移除元素
s.remove(x) 如果元素不存在,则会发送错误
s.discard(x) 如果元素不存在,不会发生错误
s.pop() 随机删除集合中的一个元素
3 计算集合元素个数
4 清理集合
len(s)
s.clear()
5 集合内置方法
3.7 Dictionary字典
字典(dictionary)是Python中另一个非常有用的内置数据类型。
列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value)
键(key)必须使用不可变类型。在同一个字典中,键(key)必须是唯一的
1 访问字典里的值
通过dict['key']来访问
2 修改字典
向字典添加新内容的方法是增加新的键/值对:
dict['key'] = value
删除字典元素
del dict['name'] # 删除键 'name'
dict.clear # 清空字典
del dict # 删除字典
popitem() # 随机返回并删除字典中的最后一对键和值
3.8 Python数据类型转换
函数描述[int(x ,base])将x转换为一个整数float(x)将x转换到一个浮点数[complex(real ,imag])创建一个复数str(x)将对象 x 转换为字符串repr(x)将对象 x 转换为表达式字符串eval(str)* 用来计算在字符串中的有效Python表达式,并返回一个对象* tuple(s)将序列 s 转换为一个元组list(s)将序列 s 转换为一个列表set(s)转换为可变集合dict(d)创建一个字典。d 必须是一个 (key, value)元组序列。frozenset(s)转换为不可变集合chr(x)将一个整数转换为一个字符ord(x)将一个字符转换为它的整数值hex(x)将一个整数转换为一个十六进制字符串oct(x)将一个整数转换为一个八进制字符串
4 程序控制结构
4.1 条件控制
if elif else
if 嵌套
原则:先实行外侧循环。满足外侧循环的条件后,开始内部循环,待内部循环结束后,重新判定外部循环条件是否继续或结束。
4.2 循环控制
counter = 0
num = 0
while counter < 100:
counter += 1
sum += counter
无限循环
while的条件永远不为fasle时可用产生无限循环
4.3 终止语句
break
n = 10
while n > 0:
n -= 1
if n == 6:
break
print(n)
print('结束')
>>>>9,8,7,结束
continue
n = 10
while n > 0:
n -= 1
if n == 6:
continue
print(n,end=',')
print('结束')
>>>9,8,7,5,4,3,2,1,0,结束
pass
5 迭代器与生成器
5.1 迭代器
迭代是访问集合元素的一种方式
迭代器是一个可以记住遍历的位置的对象
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter()创建迭代器对象 和 next()输出迭代器的下一个元素,没有时报错。
字符串,列表或元组对象都可用于创建迭代器:
>>> list=[1,2,3,4]
>>> it = iter(list) # 创建迭代器对象
>>> print (next(it)) # 输出迭代器的下一个元素
1
>>> print (next(it))
2
>>>
import sys # 引入 sys 模块
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
while True:
try:
print (next(it))
except StopIteration: # 标识迭代的完成,防止出现无限循环的情况
sys.exit()
创建一个迭代器
把一个类作为一个迭代器使用需要在类中实现两个方法 iter() 与 next() 。
_iter() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 next__() 方法并通过 StopIteration 异常标识迭代的完成。
next() 方法会返回下一个迭代器对象。
5.2 生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到yield函数就会暂停并保存当前所有的运行信息,并在下一次执行next()fa方法时从当前位置继续运行
调用一个生成器函数,返回的是一个迭代器对象
以下实例使用yield实现斐波那契数列:
import sys
def fibonacci(n):
a,b = 0,1
counter = 0
while (counter>n):
return
yield a
a,b = b,a+b
counter += 1
f = fibonacci(10) # f是一个迭代器,由生成器返回生成
while True:
try:
print(next(f),end=' ')
expect Stopiteration:
sys.exit()
>>>>0 1 1 2 3 5 8 13 21 34 55
6 函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。
6.1 函数的定义
你可以定义一个由自己想要功能的函数,以下是简单的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式]
- 调用函数也相当简单,使用函数名+圆括号()即可
6.2 参数的传递
在python中,类型属于对象,变量是没有类型的;它仅仅是一个对象的引用(一个指针)
a = [1,2] a = “runoob”
在上面的例子当中,指向List类型,也可以指向String类型
6.2.1 可更改与不可更改对象
在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
- 不可变类型: 变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 指向5的引用被丢弃,不是改变a的值,相当于新生成了a。
- 可变类型: 变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5
Python函数的参数传递
- 不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
- 可变类型: 类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响
参数
- 必需参数: 以正确的顺序传入函数。调用时的数量必须和声明时的一样,必须传入一个参数。
- 关键字参数: 使用关键字参数来确定传入的参数值。允许参数的顺序与声明时不一致,因为python解释器能够用参数名匹配参数值
- 默认参数:调用函数时,如果没有传递参数,则会使用默认参数。
def printinfo( name, age = 35 ):
"打印任何传入的字符串"
print ("名字: ", name)
print ("年龄: ", age)
return
#调用printinfo函数
printinfo( age=50, name="runoob" )
print ("------------------------")
printinfo( name="runoob" )
>>名字: runoob
>>年龄: 35
# 不传入age参数时,会使用默认的age = 35
- 不定长参数: 可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。
*args 传入的是元组;**kwargs传入的是字典
匿名函数
python使用lambda来创建匿名函数,不再使用def这样的标准语句来定义一个函数
- lambda只是一个表达式,函数体很简单
- lambda的主体不是代码块,仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda函数拥有自己的命名空间。不能访问自己参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
retunrn语句
return [表达式]
7 命名空间/作用域
7.1 命名空间
命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的。
命名空间提供了在项目中避免名字冲突的一种方法。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。
一般有三种命名空间:
- 内置名称(built-in names), Python 语言内置的名称,比如函数名 abs、char 和异常名称 BaseException、Exception 等等。
- 全局名称(global names),模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。
- 局部名称(local names),函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量。(类中定义的也是)
Python 的查找顺序为:局部的命名空间去 -> 全局命名空间 -> 内置命名空间。
命名空间的生命周期取决于对象的作用域,如果对象执行完成,则该命名空间的生命周期就结束。
7.2 作用域
作用域就是一个 Python 程序可以直接访问命名空间的正文区域。
在一个python程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。作用域分为4种,分别是:
- L(Local):最内层,包含局部变量,比如一个函数/方法内部。
- E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。位于局部与全局作用域之间,可以是闭包函数外的函数中
- G(Global):当前脚本的最外层,比如当前模块的全局变量。
- B(Built-in): 包含了内建的变量/关键字等。,最后被搜索
全局变量和局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例
total = 0 # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
#返回2个参数的和."
total = arg1 + arg2 # total在这里是局部变量.
print ("函数内是局部变量 : ", total)
return total
#调用sum函数
sum( 10, 20 )
print ("函数外是全局变量 : ", total)
>>>函数内是局部变量 : 30
>>>函数外是全局变量 : 0
global和nonlocal关键字
当内部作用域想修改外部作用域的变量时,就需要使用global和nonlocal关键字
num = 1
def fun1():
global num # 需要使用 global 关键字声明
print(num)
num = 123
print(num)
fun1()
print(num)
>>>1
>>>123
>>>123
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()
>>>100
>>>100
8 模块与包
8.1 模块
模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。
模块的好处:可维护性更强,方便代码重用。
- 1、import sys 引入 python 标准库中的 sys.py 模块;这是引入某一模块的方法。
- 2、sys.argv 是一个包含命令行参数的列表。
- 3、sys.path 包含了一个 Python 解释器自动查找所需模块的路径的列表。
模块的导入:内置模块 import os
- dir() 列出对象的所有属性及方法
- help() 查看类,方法的帮助信息
- __name__ 模块的名称
- __file__ 文件的全路径
8.2 包
包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。
比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B 。
在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。
目录只有包含一个叫做 init.py 的文件才会被认作是一个包
9 OS
os
10 错误和异常
Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。
异常处理
try/except
try 语句按照如下方式工作;
- 首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。
- 如果没有异常发生,忽略 except 子句,try 子句执行后结束。
- 如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。
- 如果一个异常没有与任何的 excep 匹配,那么这个异常将会传递给上层的 try 中。
try/except........else
- else 子句将在 try 子句没有发生任何异常的时候执行。
- 使用 else 子句比把所有的语句都放在 try 子句里面要好,这样可以避免一些意想不到,而 except 又无法捕获的异常。
- 异常处理并不仅仅处理那些直接发生在 try 子句中的异常,而且还能处理子句中调用的函数(甚至间接调用的函数)里抛出的异常。
try-finally
try-finally 语句无论是否发生异常都将执行最后的代码。(finally)
抛出异常
raise [Exception,[,args[,traceback]]]