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

Python异常

作者头像
收心
发布2023-08-24 14:00:06
1600
发布2023-08-24 14:00:06
举报
文章被收录于专栏:Java实战博客

什么是异常?

Exception是程序遇到无法处理的问题了。异常会导致程序终止。所以我们需要提前捕获异常,并给出遇到异常的处理方案,这样程序就可以继续继续执行了。

Python如何捕获异常?

异常基础语法

代码语言:javascript
复制
try:
    # A块 可能有异常的代码。
except Exception as e:
    # B块:A块发生异常,被捕获到异常后,执行此逻辑。
else:
    # C块:A块未出现异常,执行此逻辑。
finally:
    # D块:无论有没有异常,都会执行此逻辑。

try、except必须有。

else、finally是按需分别添加即可。

捕获指定异常

捕获单个指定的异常

代码语言:javascript
复制
try:
    print(nameA)
except NameError as e:
    print("出现变量未定义异常 ")
    print(e) # 输出name 'nameA' is not defined

捕获指定范围内的异常

代码语言:javascript
复制
try:
    print(nameA)
except (ZeroDivisionError,NameError) as e:
    print("可能是除0异常,也可能是变量名不存在异常 ")
    print(e) # 输出name 'nameA' is not defined

异常不在指定范围内,直接抛出异常

代码语言:javascript
复制
try:
    x = "AAA"+1; # 抛出TypeError: can only concatenate str (not "int") to str
except (ZeroDivisionError,NameError) as e:
    print("可能是除0异常,也可能是变量名不存在异常 ")
    print(e) # 输出name 'nameA' is not defined

捕获所有的异常

捕获全部异常(写法一):获取不到异常信息

代码语言:javascript
复制
try:
    print(name)  # name这个变量不存在,就会报错。
except:
    print("出现异常了")

捕获全部异常(写法二):可获取异常信息

代码语言:javascript
复制
try:
    print(name)
except Exception as e:
    print("出现异常了")
    print(e)

try-except-else

代码语言:javascript
复制
name = "OK"
try:
    print(name)
    # x = 1 / 0
except Exception as e:
    print("出现异常了")
    print(e)
else:
    print("嘿嘿,没出现异常")

"""
控制台输出:
OK
嘿嘿,没出现异常
"""

try-except-else-flinally

代码语言:javascript
复制
try:
    print(name)
except Exception as e:
    print("出现异常了")
    print(e)
else:
    print("嘿嘿,没出现异常")
finally:
    print("无论如何我都要执行")

"""
出现异常了
name 'name' is not defined
无论如何我都要执行
"""

Python如何抛出异常?raise

Python 允许手动抛出异常。您可以使用 raise 关键字来引发异常,并指定要引发的异常类型

代码语言:javascript
复制
raise ZeroDivisionError("除数不能为零")

Python 异常传递性

Python的异常跟Java的异常一样,都具有传递性。

一个线程执行A方法。A方法调用了B方法,B方法内部调用了C方法,C方法有了异常。于是异常由C方法抛给了B方法,B方法把异常抛给了A方法

代码语言:javascript
复制
def A():
    try:
        B()
    except Exception as e:
        print("C中的异常,传递到A处理了")

def B():
    C()

def C():
    raise ZeroDivisionError # 手动抛出异常

# 调用A方法
A()

Python 自定义异常

代码语言:javascript
复制
# 定义一个异常
class DiyException(Exception):
    def __init__(self, message):
        self.message = message

    def __str__(self):
        return f"自定义异常: {self.message}"

# 手动抛一下异常
raise DiyException("我是手动抛出的异常信息")

异常信息如下:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/Users/zanglikun/PycharmProjects/pythonProject/异常/自定义异常/自定义异常.py", line 10, in <module>
    raise DiyException("我是手动抛出的异常信息")
__main__.DiyException: 自定义异常: 我是手动抛出的异常信息

特殊说明: 上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com 第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取全部资料 ❤

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是异常?
  • Python如何捕获异常?
    • 异常基础语法
      • 捕获指定异常
        • 捕获单个指定的异常
        • 捕获指定范围内的异常
        • 异常不在指定范围内,直接抛出异常
      • 捕获所有的异常
        • try-except-else
          • try-except-else-flinally
          • Python如何抛出异常?raise
            • Python 异常传递性
            • Python 自定义异常
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档