1.异常捕获 - 让本该报错的代码不报错
<你知道某段代码会出现异常,而且没有办法避免,同时又希望出现异常的时候程序不奔溃;
这个时候就可以通过异常捕获,来让程序不奔溃并且自行处理异常
2.异常捕获语法
a. try-except (可以捕获所有类型的异常 - 只要代码段1中出现了异常就捕获)
try:
代码段1(可能会出现异常的代码段)
except:
代码段2(出现异常后处理异常的代码段)
其他语句
执行过程: 执行代码段1,如果代码段1中出现异常,程序不奔溃,直接执行代码段2。
如果代码段1中没有出现异常,不执行代码段2而是直接执行后面的其他语句
b. try - except 错误类型 (捕获指定类型的异常 - 只有代码段1中出现了指定类型的异常才捕获)
try:
代码段1(可能会出现异常的代码段)
except 错误类型:
代码段2(出现异常后处理异常的代码段)
c.try - except (错误类型1,错误类型2...) (同时捕获多种指定异常)
try:
代码段1(可能会出现异常的代码段)
except (错误类型1,错误类型2...):
代码段2(出现异常后处理异常的代码段)
d.try-except 错误类型1 - except 错误类型2... (同时捕获多种异常,可以对不同的异常做不同的处理)
try:
代码段1(可能会出现异常的代码段)
except 错误类型1:
代码段2
except 错误类型2:
代码段3
...
3.抛出异常 - 主动让程序奔溃
raise 错误类型 - 程序执行到这句代码就出现指定类型的异常!
说明:错误类型 - 可以是系统提供的错误类型, 也可以是自定义错误类型(要求这个值必须是一个类,而且是Exception的子类)
自定义错误类型
class YTValueError(Exception):
def __str__(self):
return '给的值不满足要求!'
def yt_function(age: int):
"""
age必须小于18!!!
"""
if age > 18:
raise YTValueError
print(age)
yt_function(20)
def method3():
print('==============2.try-except 错误类型1-except 错误类型
try:
with open('abc.txt', 'r') as f:
print(f.read())
print({'a': 100}['b']) # KeyError
except KeyError:
print('key不存在')
except FileNotFoundError:
print('文件不存在!')
print('~~~~~~~~~')
def method2():
print('==============2.try-except 错误类型===========')
try:
print({'a': 100}['b']) # KeyError
print(a)
print([1, 2, 3][4]) # IndexError
except (KeyError, IndexError):
print('出现异常')
def method1():
print('==============1.try-except===========')
# try:
# number = int(input('请输入一个数字:'))
# print(number)
# except:
# print('出现异常,输入有误!')
try:
print('abc'[4]) # IndexError
print('=======')
print({'a': 10}['b']) # KeyError
except:
print('出现异常!')
练习: 输入数字,保存成int类型,如果输入有误就继续输入,直到输入正确为止!
输入数字: 12a 输入有误,继续输入! 输入数字:a12 输入有误,继续输入! ... 输入数字: 23
def method11():
print('==============1.try-except===========')
while True:
try:
number = int(input('输入数字:'))
print('输入正确:', number)
break
except:
print('输入有误,继续输入!')
def main():
# method1()
# method11()
method3()
网友评论