👨🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。
☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的!
👋大家好!我是你们的老朋友Java学术趴。在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息直接显示给用户,而是更友好的给出一个提示的页面,通俗来说就是不让用户不知所措,使得报错更友好、更清晰。
异常的概念:
有时候写代码写错了,执行程序的时候,执行到错误代码的时候,程序直接终止报错,这是因为Python检测到了一个错误时,解析器就无法继续执行了,出了错误的提示,这就是“异常”
语法格式
Python中异常
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
复制代码
当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代码块中的逻辑
复制代码
不论 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代码块,不论有没有异常 释放资源
复制代码
实现方式:
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()
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。