一、raise用法

在程序运行的过程当中,除了python自动触发的异常外,python也允许我们在程序中手动设置异常,使用 raise 语句即可,

为什么还要手动设置异常呢?首先要分清楚程序发生异常和程序执行错误,它们完全是两码事,程序由于错误导致的运行异常,是自动触发的,需要程序员想办法解决的;但还有一些异常,是程序正常运行的结果,比如用 raise 手动引发的异常。

raise的基本格式

raise [exceptionName [(reason)]]

其中,用 [] 括起来的为可选参数,其作用是指定抛出的异常名称,以及异常信息的相关描述。如果可选参数全部省略,则 raise 会把当前错误原样抛出;如果仅省略 (reason),则在抛出异常时,将不附带任何的异常描述信息。

raise 语句有如下三种常用的用法:

1. raise:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。

a = 'a'
if not a.isdigit():
raise
print(a) # 上面的代码中,如果a=1,就可以正常运行,并且会打印1,但是值为'a',所以会走if判断,直接抛异常

运行结果如下:

2. raise 异常类名称:raise 后带一个异常类名称,表示引发执行类型的异常。

a = 'a'
if not a.isdigit():
raise ValueError
print(a)

运行结果:

3. raise 异常类名称(描述信息):在引发指定类型的异常的同时,附带异常的描述信息。

a = 'a'
if not a.isdigit():
raise ValueError("a 必须是数字")
print(a)

异常捕获:

当然我们也可以通过try去捕获我们手动触发的异常,如下:

try:
a = 'a'
#判断用户输入的是否为数字
if not a.isdigit():
raise ValueError("a 必须是数字") # 这里的异常会被捕获并打印
except Exception as e:
print("引发异常:", repr(e))
raise # 这里再次手动去触发异常

二、assert用法

assert(断言):断定此处是对的,如果错了,就报错。

通常在测试程序时不知道哪里会出错,只有执行到最后才能看到错误信息。assert可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况。

assert的语法格式:

assert expression  # 如果expression是错的,就会报错

等价于:

if not expression:
raise AssertionError

示例如下:

a = 1
assert a > 2 # 断言a大于2,如果为真,程序继续向下执行,如果a不大于2,直接抛AssertionError的异常
b = 2 # 运行结果:报错
Traceback (most recent call last):
File "C:\workspace\test.py", line 2, in <module>
assert a > 2
AssertionError

为assert断言语句添加异常参数:

assert expression [, arguments]  
# arguments这个参数是可选的,就是在expression后添加字符串信息,用来解释断言并更好知道哪里出了问题

示例如下:

a = 1
assert a > 2, 'a值小于2'
# 上面逗号后面跟一个字符串,添加报错说明 # 运行结果:
Traceback (most recent call last):
File "C:\workspace\test.py", line 2, in <module>
assert a > 2, 'a值小于2'
AssertionError: a值小于2

python的assert和raise的用法的更多相关文章

  1. [Python]python中assert和isinstance的用法

    assert语句是一种插入调试断点到程序的一种便捷的方式. assert == assert == True assert ( == ) print('-----------') assert ( = ...

  2. Python操作MySQL -即pymysql/SQLAlchemy用法

    本节介绍Python对于MySQL的一些操作用法 模块1:pymysql(等同于MySQLdb) 说明:pymysql与MySQLdb模块的使用基本相同,学会pymysql,使用MySQLdb也就不是 ...

  3. 简单说明Python中的装饰器的用法

    简单说明Python中的装饰器的用法 这篇文章主要简单说明了Python中的装饰器的用法,装饰器在Python的进阶学习中非常重要,示例代码基于Python2.x,需要的朋友可以参考下   装饰器对与 ...

  4. Python中【__all__】的用法

    Python中[__all__]的用法 转:http://python-china.org/t/725 用 __all__ 暴露接口 Python 可以在模块级别暴露接口: __all__ = [&q ...

  5. python之模块pprint之常见用法

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块pprint之常见用法 import pprint data = [(1,{'a':'A' ...

  6. python之模块poplib之常见用法

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块poplib之常见用法 ''' 所以,收取邮件分两步: 第一步:用poplib把邮件的原始 ...

  7. Python爬虫Urllib库的高级用法

    Python爬虫Urllib库的高级用法 设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Head ...

  8. python中enumerate()函数用法

    python中enumerate()函数用法 先出一个题目:1.有一 list= [1, 2, 3, 4, 5, 6]  请打印输出:0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 打印输 ...

  9. Python中try...except...else的用法

    Python中try...except...else的用法: try:    <语句>except <name>:    <语句>          #如果在try ...

  10. Python中logging模块的基本用法

    在 PyCon 2018 上,Mario Corchero 介绍了在开发过程中如何更方便轻松地记录日志的流程. 整个演讲的内容包括: 为什么日志记录非常重要 日志记录的流程是怎样的 怎样来进行日志记录 ...

随机推荐

  1. C#调用接口的简单流程

    1.编写url地址 string url="http://192.168"; 2.创建http请求对象 HttpWebRequest request = (HttpWebReque ...

  2. Java内存区域有哪些构成?

    目录 前言 Java 内存区域 程序计数器 虚拟机栈 本地方法栈 堆 方法区 字符串常量池 运行时常量池 直接内存 小结 作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算 ...

  3. Linux c 检测当前网卡是否已经启动

    思路: 1.socket 建立一个数据报套接字. 2.定义一个struct ifreq ifr 结构体.将网络名称如"eth0" 赋值给ifr结构体的ifr.ifr_name. 3 ...

  4. OpenMP 原子指令设计与实现

    OpenMP 原子指令设计与实现 前言 在本篇文章当中主要与大家分享一下 openmp 当中的原子指令 atomic,分析 #pragma omp atomic 在背后究竟做了什么,编译器是如何处理这 ...

  5. Angular基础之ngFor遍历对象数组获取key和value渲染页面的几种方法

    Angular的ngFor遍历对象数组的几种方法 方法一 ts文件: export class MyDemo {   objectKeys = Object.keys;   myObj = { a: ...

  6. 手把手教大家写书写一个Mqtt网关

    摘要:物联网是现在比较热门的软件领域,众多物联网厂商都有自己的物联网平台,而物联网平台其中一个核心的模块就是Mqtt网关. 本文分享自华为云社区<一文带你掌握物联网mqtt网关搭建背后的技术原理 ...

  7. Ubuntu玩机记录,让我破电脑又飞起来了

    写在前面 很早之前的电脑ThinkPad E440,一直没怎么用.最近整理了一下电脑的资料,全部备份到云盘.整理的过程感觉电脑很慢很慢,难受极了.整理完后,终于我要对它下手了! 我制作了启动U盘,把U ...

  8. 聊聊JUC包下的底层支撑类-AbstractQueuedSynchronizer(AQS)

    聊聊JUC包下的底层支撑类-AbstractQueuedSynchronizer(AQS) juc包下的一堆并发工具类是我们日常开发特别是面试中常被拿来问的八股文之一,为了工作也好,为了面试也罢,今天 ...

  9. STM32F1库函数初始化系列:定时器中断

    1 static void TIM3_Configuration(void) //10ms 2 { 3 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 4 ...

  10. SQL性能优化的47个小技巧,你了解多少?

    大家好,我是哪吒. 1.先了解MySQL的执行过程 了解了MySQL的执行过程,我们才知道如何进行sql优化. 客户端发送一条查询语句到服务器: 服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中 ...