含义:异常就是程序运行的过程中出现了错误
bug就是指异常的意思,因为历史因为小虫子导致计算机失灵的案例,所以延续至今,bug就代表软件出现错误。
答:世界上没有完美的程序,任何程序在运行的过程中,都有可能出现:异常,也就是出现bug导致程序无法完美运行下去。我们要做的,不是力求程序完美运行。而是在力所能及的范围内,对可能出现的bug,进行提前准备、提前处理。这种行为我们称之为:异常处理(捕获异常)
答:当我们的程序遇到了BUG,那么接下来有两种情况:
1. 整个程序因为一个BUG停止运行 。 2. 对BUG进行提醒,整个程序继续运行。
显然在之前的学习中,我们所有的程序遇到BUG就会出现①的这种情况,也就是整个程序直接奔溃.但是在真实工作中,我们肯定不能因为一个小的BUC就让整个程序全部奔溃,也就是我们希望的是达到②的这种情况那这里我们就需要使用到捕获异常捕获异常的作用在于:提前假设某处会出现异常,做好提前准备,当真的出现异常的时候,可以有后续手段。
try:
f = open("文件地址.txt","r",encoding="UTF-8") #打开文件 (读取) 这个开始不存在
except:
f = open("文件地址.txt","w",encoding="UTF-8") # 以写入的模式 打开文件
print(f"f的类型是{type(f)}")
常见的 异常类 :
种类 | 异常原因 |
AssertionError | 断言语句失败(assert 后的条件为假) |
AttributeError | 访问的对象属性不存在 |
ImportError | 无法导入模块或者对象,主要是路径有误或名称错误 |
IndentationError | 代码没有正确对齐,主要是缩进错误 |
IndexError | 下标索引超出序列范围 |
IOError | 输入/输出异常,主要是无法打开文件 |
KeyError | 访问字典里不存在的键 |
NameError | 访问一个未声明的变量 |
OverflowError | 数值运算超出最大限制 |
SyntaxError | python语法错误 |
TabError | Tab和空格混用 |
TypeError | 不同类型数据之间的无效操作(传入对象类型与要求的不符合) |
ValueError | 传入无效的值,即使值的类型是正确的 |
ZeroDivisionError | 除法运算中除数0 或者 取模运算中模数 |
FileNotFoundError | 打开文件的时候,文件不存在错误 |
参考文章:(1条消息) 【Python】-- 异常(捕获指定异常、常见异常类型)_python中捕获特定类型异常_四月天行健的博客-CSDN博客
try:
f = open("文件地址.txt","r",encoding="UTF-8") #打开文件 (读取) 这个开始不存在
except FileNotFoundError as e:
print(f"出现异常,异常原因是{e}")
2.7.1 捕获多个异常错误的语法
2.7.2 捕获多个异常错误的样例代码
try:
f = open("文件地址.txt","r",encoding="UTF-8") #打开文件 (读取) 这个开始不存在
except (FileNotFoundError,NameError) as e:
print(f"出现异常,异常原因是{e}")
2.8.1 样例代码 (异常类型变为 Exception)
try:
f = open("文件地址.txt","r",encoding="UTF-8") #打开文件 (读取) 这个开始不存在
except Exception as e:
print(f"出现异常,异常原因是{e}")
首先 print(1) 是执行的 , 然后第二个没有执行, 第三个执行了!!
答:异常是具有传递性的 (如下图所示)
当函败func01 中发生异常、并且没有捕获处理这个异常的时候,异常会传递到函数func02 ,当func02 也没有捕获处理这个异常的时候 main函数会捕获这个异常、这就是异常的传递性。当所有函数都没有拙获异常的时候,程序就会报错!!!
答:Python 模块(Module),是一个 Python 文件,以.py 结尾.模块能定义函数,类和变量,模块里也能包含可执行的代码模块的作用:python中有很多各种不同的模块,每一个模块都可以帮助我们快速的实现一些功能,比如实现和时问相关的功能就可以使用time模块我们可以认为一个模块就是一个工具包,每一个工具包中都有各种不同的工具供我们使用进而实现各种不同的功能。大白话:模块就是一个Python文件,里面有类、函数、变量等,我们可以拿过来用(导入模块去使用)
import time # 导入time 模块
print("开始")
time.sleep(1) #休眠一秒
print("结束")
一个重要的代码
form time import * # *表示全部的信息全部导入
4.5.1 模块定义别名
4.5.2 功能定义别名
答:Python中已经帮我们实现了很多的模块.不过有时候我们需要一些个性化的模块,这里就可以通过自定义模块实现,也就是自己制作一个模块。(不同模块,同名的功能,如果都被导入,那么后导入的会覆盖先导入的)
module1.py 代码
def test(a,b):
print(a+b)
return a+b
主代码:
#import time #导入Python内置的time模块(time.py这个代码文件)
import module1
nn = module1.test(1,2)
print(f"nn的值是{nn}")
__name__ 语句的功能: 特定语句, 当运行本文件(module1.py)是会运行这个代码,但是当别的文件(主函数.py) 调用本文件(module1.py)的时候不会运行这个代码 (自己试试就知道了)
module1.py 代码
def test(a,b):
print(a+b)
return a+b
if __name__ == "__main__": #特定语句, 当运行本文件是会运行这个代码,但是当别的文件 调用本文件的时候不会运行这个代码
print("111111")
主函数.py
#import time #导入Python内置的time模块(time.py这个代码文件)
import module1
nn = module1.test(1,2)
print(f"nn的值是{nn}")
5.4.1 语句含义
答:如果一个模块文件中有`_all_`变量,当使用`from xxx import * (导入时,只能导入这个列表中的元素)
5.4.2 __all__ 语句代码样例 (自己试试) (出错之后 注释代码,再试试!!)
module1 .py 模块代码
__all__ == ['test'] #
def test(a,b):
print(a+b)
return a+b
def test1(a,b):
print(a-b)
return a-b
if __name__ == "__main__": #特定语句, 当运行本文件是会运行这个代码,但是当别的文件 调用本文件的时候不会运行这个代码
print("111111")
主函数.py 模块
#import time #导入Python内置的time模块(time.py这个代码文件)
from module1 import * # 假如现在 module1模块里面有 __all__ 模块 我们的模块调用就不可以使用 all [] 里面之外的函数。
nn = module1.test(1,2)
print(f"nn的值是{nn}")
mm = module1.test1(1,2)
print(f"mm的值是{mm}")
答: 从物理上看,包就是一个文件夹,在该文件夹下包含了一个_init_.py 文件,该文件夹可用于包含多个模块文件从逻辑上看,包的本质依然是模块。
答:当我们的模块文件越来越多时,包可以帮助我们管理这些模块,包的作用就是包含多个模块,但包的本质依然是模块。
步骤如下:
1. 在项目工程中 添加一个python的包.
2. 在包里面添加 模块
3. 查看 包里面的内容 (一定会有一个 __init__.py 文件)
import package1.module1 #加载包里面的模块 可以与之前的导入模块的函数相结合
nn = package1.module1.test(1,2)
print(f"nn的值是{nn}")
mm = package1.module1.test1(1,2)
print(f"mm的值是{mm}")
下面步骤适应 : 软件是 PyCharm
假如和我一样是 visual studio 2019 打开使用python 的可以参考下面这个文章的 python 第三方包的下载方法!!
参考文章:VS 2019安装python第三方包_vs2019 python 安装包_泰勒Peano的博客-CSDN博客