程序在运行时,如果 Python 解释器 遇到到⼀个错误,会停止程序的执行,并且提示⼀些错误信息,这就是 异常 。程序停止执行并且提示错误信息这个动作,抛出异常(raise 关键字)捕获异常:程序遇到异常,默认动作是终止代码程序的执行,遇见异常之后,可以使用异常捕获,让程序代码继续运行,不会终止运行(重点)
异常捕获【重点】
基本语法
try :书写可能发生异常的代码except : # 任何类型的异常都能捕获发生了异常执行的代码try :书写可能发生异常的代码except 异常类型 : # 只能捕获指定类型的异常, 如果不是这个异常, 还是会报错发生了异常执行的代码
try:
# 1. 获取⽤户从键盘输⼊的数据
num = input('请输⼊数字:')
# 2. 转换数据类型为整数
num = int(num)
# 3. 输出转换之后的数据内容
print(num)
except:
print('请输⼊正确的数字')
print('后续其他的代码,可以继续执⾏')
try:
# 1. 获取⽤户从键盘输⼊的数据
num = input('请输⼊数字:')
# 2. 转换数据类型为整数
num = int(num)
# 3. 输出转换之后的数据内容
print(num)
except ValueError: # 只能捕获 ValueError 类型及其⼦类的异常
print('发⽣了异常, 请输⼊正确的数字...')
捕获多个指定类型的异常
好处:可以针对不同的异常错误,进行单独的代码处理。
try :书写可能发生异常的代码except 异常类型 1 : # 只能捕获指定类型的异常, 如果不是这个异常, 还是会报错发生了异常 1 执行的代码except 异常类型 2 :发生了异常 2 执行的代码except 异常类型 ...:发生了异常 ... 执行的代码
try:
# 1. 获取⽤户从键盘输⼊的数据
num = input('请输⼊数字:')
# 2. 转换数据类型为整数
num = int(num)
# 3. 输出转换之后的数据内容
print(num)
a = 10 / num # 10 / 0
print(f'a: {a}')
except ValueError: # 只能捕获 ValueError 类型及其⼦类的异常
print('发⽣了异常, 请输⼊正确的数字...')
except ZeroDivisionError:
print('除数不能为 0')
异常捕获的完整版本
完整版本中的内容
,
不是说每⼀次都要全部书写
,
根据自己的需要
,
去选择其中的进行使用。
try :可能发生异常的代码except 异常类型 1 :发生异常类型 1 执行的代码# Exception 是常见异常类的父类, 这里书写 Exception, 可以捕获常见的所有⼀会,as 变量, 这个变量是⼀个异常类的对象,print( 变量 ) 可以打印异常信息except Exception as 变量 :发生其他类型的异常 , 执行的代码else :没有发生异常会执行的代码finally :不管有没有发生异常 , 都会执行的代码
try :可能发生异常的代码except Exception as e :发生异常执行的代码
try:
# 1. 获取⽤户从键盘输⼊的数据
num = input('请输⼊数字:')
# 2. 转换数据类型为整数
num = int(num)
# 3. 输出转换之后的数据内容
print(num)
a = 10 / num # 10 / 0
print(f'a: {a}')
except Exception as e:
print(f"错误信息为: {e}")
else:
print('没有发⽣异常我会执⾏')
finally:
print('不管有没有发⽣异常,我都会执⾏')
# print('不管有没有发⽣异常,我都会执⾏')
异常传递【了解】
- 异常传递是 Python 中已经实现好了,我们不需要操作,我们知道异常会进行传递.
- 异常传递:在函数嵌套调用的过程中,被调用的函数,发生了异常,如果没有捕获,会将这个异常向外层传递. .... 如果传到最外层还没有捕获,才报错。
模块和包
- Python 源代码文件就是⼀个模块
- 模块中定义的变量函数类,都可以让别人使用,同样,可以使用别人定义的(好处:别人定义好的不需要我们再次书写,直接使用即可)
- 想要使用别人的模块中的内容工具(变量,类,函数),必须先导入模块才可以
- 我们自己写的代码,想要作为模块使用,代码的名字需要满足标识符的规则(由数字,字母下划线组成,不能以数字开头)
导入模块的语法
方式一
import 模块名# 使用模块中的内容模块名 .工 具名# 举例import randomimport jsonrandom . randint ( a , b )json . load ()json . dump ()
方式二
from 模块名 import 工 具名# 使用工具名 # 如果是函数和类需要加括号# 举例from random import randintfrom json import load , dumprandint ( a , b )load ()dump ()
方式三
【
了解】
基本不用
from 模块名 import * # 将模块中所有的内容都导入from random import *from json import *randint ( a , b )load ()dump ()
# ⽅式⼀ 重点记忆
# import random
#
# print(random.randint(1, 20))
# ⽅式⼆, 重要快捷⽅式导包
# from random import randint
# from random import randint
#
# print(randint(1, 20))
# ⽅式三, 问题: 可能存在多个模块中有相同的名字的⼯具, 会
产⽣冲突
from random import *
print(randint(1, 20))
对于导入的模块和工具可以使用
as
关键字给其起别名
注意:
如果起别名
,
原来的名字就不能用了
,
只能使用别名