持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的21天,点击查看活动详情
👨🎓作者:Java学术趴
💌公众号:Java学术趴
🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。
🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。
☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的!
👋大家好!我是你们的老朋友Java学术趴。在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息直接显示给用户,而是更友好的给出一个提示的页面,通俗来说就是不让用户不知所措,使得报错更友好、更清晰。
第十九章 异常处理
19.1 内置的异常处理
19.1.1 异常的概念
异常的概念:
有时候写代码写错了,执行程序的时候,执行到错误代码的时候,程序直接终止报错,这是因为Python检测到了一个错误时,解析器就无法继续执行了,出了错误的提示,这就是“异常”
语法格式
Python中异常
19.1.2 try...except 语句
- 将可能出错的代码放到try里面,except可以指定类型捕获异常。except里面的代码是捕获到异常时执行,将错误捕获,这样程序不会因为异常的而代码导致整个程序崩塌。
- Exception : 当我们不知道程序会抛出什么异常的时候,就使用 Exception,它包含所有的异常
- 只有当被监控的代码出现异常的时候,才会执行 except 中处理异常的代码块
except : 当try中的代码发生异常的时候执行这个except代码块
# 异常处理
# try中存储可能发生异常的代码块
try:
print(b)
print(1/0)
pass
# except中用于打印报错信息
# NameError : 代表的是错误的类型(未定义参数),需用使用特定的错误类型来接收错误信息,否则报错
except NameError as msg:
print(msg)
pass
# 可以一次定义多个 except 模块,分别用于处理不同的错误类型。
# Python会根据报错信息不同,执行不同的except代码块
except ZeroDivisionError as msg:
print(msg)
pass
# 在Python中存在一个异常的集合父类,这个 Exception 可以接收任意类型的异常
except Exception as msg:
print(msg)
pass
# 此时程序不会被终止运行,会打印错误信息:name 'b' is not defined或者division by zero
19.1.3 try...except...else 语句
当try中的代码块没有发生异常时候执行 else 代码块
# 异常处理
# try中存储可能发生异常的代码块
def show(a):
try:
print(10 / a)
pass
except ZeroDivisionError as msg:
print(msg)
pass
# 当 try 中的代码没有异常的时候执行else中代码块
else:
print('此时代码没有发生异常')
pass
show(10)
# 1.0
# 此时结果为0,此时代码没有发生异常,执行的else代码块中的逻辑
19.1.4 try...except...else...finally 语句
不论 try 中的代码是否抛出异常,都会执行 finally 代码块
# 异常处理
# try中存储可能发生异常的代码块
def show(a):
try:
print(10 / a)
pass
# 当try中的代码发生异常的时候执行 except 代码块
except ZeroDivisionError as msg:
print(msg)
pass
# 当 try 中的代码没有异常的时候执行else中代码块
else:
print('此时代码没有发生异常')
pass
# 不论 try 代码块有没有异常都会执行 finally 代码块
finally:
print('释放资源')
pass
pass
show(10)
# 1.0
# 此时结果为0,此时代码没有发生异常,执行的else代码块中的逻辑
# 也会执行 finally代码块,不论有没有异常 释放资源
19.2 自定义异常
实现方式:
- 自定义异常,都要直接或者间接继承Error或Exception类
- 由开发者主动抛出自定义异常,在Python中使用raise关键字
- 这个 raise关键字和Java中的throw关键子一样,都是用于抛出一个异常的
Python内置的异常是由Python自己抛出的,而自定义的异常需要使用 raise 关键字手动抛出
# 自定义异常类,必须直接或者间接的继承 Exception 类
class TooLong(Exception):
def __init__(self, name):
self.name = name
pass
# 定义错误信息
def __str__(self):
return '您输入姓名的长度为:' + str(len(self.name)) + '超出了姓名长度'
pass
def get_name():
name = input('请输入姓名:')
# 判断姓名的长度
try:
if len(name) > 5:
# 此时使用 raise 关键字抛出一个自定义的异常
raise TooLong(name)
else:
print(name)
pass
except TooLong as msg:
print(msg)
pass
else:
print('代码没有异常')
pass
finally:
print('释放资源')
pass
pass
# 调用方法
get_name()
\