1.try-except

try except组合是用来处理异常的一对黄金搭档,python中也不例外。可以看个简单的例子:

def t1():try:a, b = 1.0, "2.0"c = a / float(b)print("c is: ", c)except ValueError as err:print("b must be digit!")except ZeroDivisionError as err:print("b is zero!")except Exception as ex:print("there is unexpect exception!")

上面两个数相除的例子,首先,如果b的值是"abc",会抛出一个ValueError的异常:could not convert string to float: 'abc',该异常被except ValueError as err捕获。其次,如果b的值是"0.0",会抛出一个ZeroDivisionError的异常:ZeroDivisionError: float division by zero,该异常被except ZeroDivisionError as err:捕获。最后,如果还有其他异常,则被最后一句except语句捕获。

2.raise

上面的例子中,都是被动接受处理异常。自然我们也可以主动抛出异常,这个时候就用到了raise关键字。

相比被动接受处理异常,主动抛出异常的好处自然很多。
1.使用方式更为灵活,可以根据我们的业务场景,业务需求,来定义虽然代码语法上准确无误,但不满足我们要求的情况为异常情况。
2.可以自定义异常报错信息,方便我们发现与排查问题。

raise常见的用法有以下三种

1.只有一个raise关键字,可以引发当前捕获的异常。

def t1():try:x = "x"x = float(x)except:raise

执行这段代码,会有如下输出:

ValueError: could not convert string to float: 'x'

2.raise + 异常类信息,表示引发异常的类型。

def t1():try:x = "x"x = float(x)except:raise ValueError()

执行上述代码,有如下输出:

ValueError

如果将上面的代码稍作修改:

def t1():try:x = "x"x = float(x)except:raise ZeroDivisionError()

上面的代码则会输出如下:

ValueError: could not convert string to float: 'x'During handling of the above exception, another exception occurred:
...
ZeroDivisionError

上面的例子,float(x)转化的时候,系统抛出了一个ValueError的异常,但是因为我们raise的时候,指定的是ZeroDivisionError,所以还会抛出来一个ZeroDivisionError。

3.raise + 异常类型 + 描述信息

def t1():x = "a"if not x.isdigit():raise ValueError("x must be digit!")

上面代码运行,则会输出如下信息:

ValueError: x must be digit!

3.try-except捕获raise异常

raise出来异常以后,我们经常还用try except对异常进行捕获

def t1():try:x = "a"if not x.isdigit():raise ValueError("x must be a num!")except Exception as ex:print("there is exception: ", repr(ex))

上面的代码运行结果如下

there is exception:  ValueError('x must be a num!')

4.assert

assert是用来表明某个条件为真,当assert语句失败返回False的时候,会抛出AssertionError。

看个简单的实例

def t3():a = 2assert a > 5print(a ** 2)

此时代码会抛出异常

AssertionError

如果将a赋值为10,代码会输出100。

assert本质上还是raise一个AssertionError,所以我们也可以使用try-catch来捕获这个异常,而不是让这段code直接崩溃。

def sqrt(x):try:assert x >= 0num = math.sqrt(x)print("num is: ", num)except:print("if you want to solve sqrt num, x must be bigger or equal zero!")sqrt(4)
sqrt(-4)
num is:  2.0
if you want to solve sqrt num, x must be bigger or equal zero!

python 异常处理小结 try except raise assert相关推荐

  1. Python异常处理try...except...finally raise assert

    异常处理: try ...except  try代码块放置容易发生异常的语句:except代码块放置处理异常的语句 try ...except...finally finally代码快是任何时候都会执 ...

  2. python异常处理--try except else raise finally

    python异常处理--try except else raise finally 参考文章: (1)python异常处理--try except else raise finally (2)http ...

  3. Python零基础速成班-第6讲-Python异常处理Exception,tryexcept,raise,assert,输入模块pyinputplus

    Python零基础速成班-第6讲-Python异常处理Exception,try&except,raise,assert,输入模块pyinputplus 学习目标 异常处理Exception: ...

  4. Python 异常处理--raise函数用法

    Python 异常处理--raise函数用法 参考文章: (1)Python 异常处理--raise函数用法 (2)https://www.cnblogs.com/darkgui34/p/405074 ...

  5. 执行transact-sql语句或批处理时发生异常_DAY5-step6 Python异常处理:try, raise,except, finally...

    Python中的异常是什么? 异常是在程序执行时发生的错误. 在运行程序时,Python如果发生一个异常,应将其处理以避免程序崩溃. 在Python语言中,异常会在错误时自动触发,或者可以由您的代码触 ...

  6. 系统学习Python——异常处理:raise语句

    如果要显式地触发异常,可以使用raise语句.它们的一般形式相当简单.一条raise语句的组成包括raise关键字,后面跟着可选的要引发的异常类或者异常类的一个实例: raise instance # ...

  7. python示例异常处理与程序调试_笔记:Python异常处理与程序调试

    Python异常处理与程序调试 Python提供了强大的异常处理机制,通过捕获异常可以提高程序的健壮性.异常处理还具有释放对象,中止循环的运行等作用.在程序运行的过程中,如果发生了错误,可以返回事先约 ...

  8. 十一、Python异常处理

    Python异常处理 异常抛出机制,为程序开发人员提供了一种在运行时发现错误,进行回复处理,然后继续执行的能力 #!/usr/bin/python try: open('abc.txt') excep ...

  9. 【Python学习教程】Python异常处理机制

    文章目录 什么是异常处理,Python常见异常类型(入门必读) Python语法错误 Python运行时错误 Python异常处理机制到底有什么用? Python try except异常处理详解(入 ...

  10. python处理流程-Python异常处理大全(二)

    原标题:Python异常处理大全(二) 本文是Python异常处理教程的第二部分,上部分我们简单的介绍了几种异常,及其处理办法,这部分我们将更详细地对Python中产生的异常处理方法进行探讨. 函数使 ...

最新文章

  1. Java基础部分笔记----------网络编程
  2. php如何获取select multiple的值
  3. NVIDIA Jetson NX开发板在U盘挂载的时候出现:error mounting unknown filesystem type ‘exfat‘错误
  4. winform中键盘和鼠标事件的捕捉和重写(转)
  5. android activity之间传递对象,Android Activity之间的数据传递
  6. 厉害了!Spring Boot 2.5正式发布
  7. Java中遍历文件夹的2种方法
  8. AndroidManifest.xml 中application 的 android:name 属性作用
  9. cad添加自己线性_如何自定义自己需要的CAD线型?
  10. 必须掌握,二叉树的前中后序遍历(迭代+递归)详细代码
  11. 开源遥感软件(未完待续)
  12. 真正靠谱免费的数据恢复软件哪个好用?
  13. 【vue】使用手机app扫描二维码登录
  14. 【收藏】B站科普硬核节目
  15. 边缘计算在视频直播场景的应用与实践
  16. 10行命令60秒快速定位性能瓶颈
  17. 思科交换机如何配置Trunk?
  18. 【OpenHarmony】napi基本用法之promise实现
  19. 物流行业的大数据发展与应用
  20. 简单便宜智能家居解决方案

热门文章

  1. Objective C类方法load和initialize的区别
  2. JVM学习笔记(三)------内存管理和垃圾回收【转】
  3. Linux文件传输与mysql数据库安装
  4. hibernate笔记--组合主键映射方法
  5. 在 Windows 中实现 Java 本地方法-Java native 关键词
  6. 线程程序编译错误注意加-lpthread
  7. 域用户开机自动加入本地管理员组VBS脚本+限制多点登录
  8. Confluence3.4的安装和配置
  9. axios传参 后台接收为空
  10. python实现归并算法