前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python干货——异常处理

Python干货——异常处理

原创
作者头像
Java学术趴
发布2022-06-17 01:51:40
3600
发布2022-06-17 01:51:40
举报
文章被收录于专栏:Java全栈·

👨‍🎓作者:Java学术趴 🏦仓库:GithubGitee ✏️博客:CSDN掘金InfoQ云+社区 💌公众号: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代码块

代码语言:javascript
复制
# 异常处理
# 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 代码块

代码语言:javascript
复制
# 异常处理
# 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 代码块

代码语言:javascript
复制
# 异常处理
# 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 关键字手动抛出

代码语言:javascript
复制
# 自定义异常类,必须直接或者间接的继承 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第十九章 异常处理
    • 19.1 内置的异常处理
      • 19.1.1 异常的概念
      • 19.1.2 try...except 语句
      • 19.1.3 try...except...else 语句
      • 19.1.4 try...except...else...finally 语句
    • 19.2 自定义异常
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档