异常
-
为什么要捕获异常
- 当程序遇到了BUG,如果不对BUG进行手动捕获,那么整个程序就会因为一个BUG而停止运行,这在有些情况下是会造成很大的损失,但是如果我们进行了手动捕获,那么整个程序会继续运行
- 捕获异常的作用在于:提前假设某处会出现异常,做好准备,如果出现异常,就执行相对应的代码
-
捕获所有异常,写法一:
例如:
-
捕获所有异常,写法二:
-
捕获指定异常:
例如:
-
捕获多个异常:
例如:
-
异常else:
-
异常finally:
例如:
try:
# 表示这段代码有可能出现异常,但我也不确定
except:
# 如果try内的代码出现了异常,那么我用except来进行捕获,并执行except内的代码
else:
# 如果try内的代码没有出现异常,那么我执行else内的代码
finally:
# 无论try内的代码有没有异常,我都要执行finally内的代码
# try和except是必须写且要成对出现的,而else和finally是可写可不写的
- 异常的传递性
- 基于函数之间的调用方式,异常会一层一层的向上传递,直到传递到我当前执行的最高的层级,如果在最高的层级没有调用try,程序就会直接抛出异常,如果调用try,就会尝试捕获
- 因此,如果想要捕获异常,并不需要定位到出现异常的那句代码,只需要函数之间存在调用关系,我们在最顶层的调用处,依然可以运行try进行捕获,例如:
模块导入
- 什么是模块:
- 模块的导入方式:
- [ ]表示可以省略
- 通过 . 可以使用模块内部的全部功能(类、函数、变量),且通过 . 来确定层级关系
- 有时我们不需要使用模块内部的全部功能,就可以使用以下代码来导入模块中的某个具体方法,这种写法不需要 . ,可以直接写方法名
- 以下的导入方法,不需要 . 也可以使用模块中的全部方法
- 通过as 别名,可以更方便的使用模块
- 模块的导入一般写在代码文件的开头位置
- [ ]表示可以省略
自定义模块
- 由于每个Python文件都可以作为一个模块,所以如果想要自定义模块,那么对应的文件名必须要符合标识符命名规则,例如:
- 注意事项:当导入多个模块的时候,且模块内有同名功能,当调用这个同名功能的时候,调用的是后面导入的模块的功能,如下:
- _ _ main _ _:
- Python文件会内置一个_ _ name _ 的变量,当我们右键运行该文件时,这个文件是main文件,即它的 _ name _ 就等于 _ main _ ,但我们右键运行其他文件的时候,该文件不是main文件,即它的 _ name _ _ 不是_ _ main _ _,如下:
- Python文件会内置一个_ _ name _ 的变量,当我们右键运行该文件时,这个文件是main文件,即它的 _ name _ 就等于 _ main _ ,但我们右键运行其他文件的时候,该文件不是main文件,即它的 _ name _ _ 不是_ _ main _ _,如下:
- _ _ all _ _:
- _ _ all _ 是一个列表,如果一个模块文件中有 _ all _ _,当使用" from xxx import * "导入时,只能导入这个列表中的元素,如下:
- 但是,如果用" from xxx import xxx "导入时,可以导入_ _ all _ _内没有的元素
- _ _ all _ 是一个列表,如果一个模块文件中有 _ all _ _,当使用" from xxx import * "导入时,只能导入这个列表中的元素,如下:
包
* 从物理上看,包相当于一个文件夹,里面包含一个_ _ init _ _ .py文件,还可以存放许多Python的模块(代码文件),通过包,逻辑上将一批模块归为一类,方便管理。如果去掉_ _ init _ _.py,那么这个包就真的变为一个文件夹。
* 创建包后,包内会自动创建_ _ init _ _.py文件
- 导入包
- 这种情况下,需要包名.模块名.功能名
- 或者 from 包名 import 模块名
- 这种情况下,不用包名,直接模块名.功能名就行
- 或者 from 包名.模块名 import 功能名
- 这种情况下,不用包名.模块名,直接用功能名就行
* _ _ all _ _ = [ ] ,[ ]里用“ ”或’ '都可以
pip安装第三方包
1. pip install 包名称
# 国外官网安装
2. pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
# 国内清华镜像网安装