python的assert和raise的用法
一、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的用法的更多相关文章
- [Python]python中assert和isinstance的用法
assert语句是一种插入调试断点到程序的一种便捷的方式. assert == assert == True assert ( == ) print('-----------') assert ( = ...
- Python操作MySQL -即pymysql/SQLAlchemy用法
本节介绍Python对于MySQL的一些操作用法 模块1:pymysql(等同于MySQLdb) 说明:pymysql与MySQLdb模块的使用基本相同,学会pymysql,使用MySQLdb也就不是 ...
- 简单说明Python中的装饰器的用法
简单说明Python中的装饰器的用法 这篇文章主要简单说明了Python中的装饰器的用法,装饰器在Python的进阶学习中非常重要,示例代码基于Python2.x,需要的朋友可以参考下 装饰器对与 ...
- Python中【__all__】的用法
Python中[__all__]的用法 转:http://python-china.org/t/725 用 __all__ 暴露接口 Python 可以在模块级别暴露接口: __all__ = [&q ...
- python之模块pprint之常见用法
# -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块pprint之常见用法 import pprint data = [(1,{'a':'A' ...
- python之模块poplib之常见用法
# -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块poplib之常见用法 ''' 所以,收取邮件分两步: 第一步:用poplib把邮件的原始 ...
- Python爬虫Urllib库的高级用法
Python爬虫Urllib库的高级用法 设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Head ...
- python中enumerate()函数用法
python中enumerate()函数用法 先出一个题目:1.有一 list= [1, 2, 3, 4, 5, 6] 请打印输出:0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 打印输 ...
- Python中try...except...else的用法
Python中try...except...else的用法: try: <语句>except <name>: <语句> #如果在try ...
- Python中logging模块的基本用法
在 PyCon 2018 上,Mario Corchero 介绍了在开发过程中如何更方便轻松地记录日志的流程. 整个演讲的内容包括: 为什么日志记录非常重要 日志记录的流程是怎样的 怎样来进行日志记录 ...
随机推荐
- 1_使用swiper数组对象循环图片遇到的问题
今天在练习微信小程序的swiper组件时,想用列表循环出图片,发现图片一直没出来,控制台也没有报错,后来仔细一看,原来是语法格式写错了. 以下是我列表循环踩过的坑: 一:微信小程序的列表循环和vue的 ...
- 激光炸弹【算法竞赛进阶指南, HNOI2003】
激光炸弹 地图上有 \(N\) 个目标,用整数 \(Xi,Yi\)表示目标在地图上的位置,每个目标都有一个价值 \(Wi\). 注意:不同目标可能在同一位置. 现在有一种新型的激光炸弹,可以摧毁一个包 ...
- Java学习笔记 :2021年12月31日 上午
Java学习笔记 :2021年12月31日 上午 目录 Java学习笔记 :2021年12月31日 上午 关于计算机语言 1.关于语言的分类 2.小结 关于Java语言的基础语法 1.主方法 2.其他 ...
- 【大型软件开发】浅谈大型Qt软件开发(二)面向未来开发——来自未来的技术:COM组件。我如何做到让我们的教学模块像插件一样即插即用,以及为什么这么做。
前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要进行这个 ...
- flutter flutter_screenutil Looking up a deactivated widget's ancestor is unsafe.
先强调一下,很多问题可以使用reStart更新试一下下!!!!! 使用flutter_screenutil 报错 Looking up a deactivated widget's ancestor ...
- 字节输出流OutputStream类-字节输出流写入数据到文件
字节输出流OutputStream类 java.io.OutputStream抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地.它定义了字节输出流的基本共性功能方法.public v ...
- 【随笔记】全志平台 gpio-leds 驱动应用
硬件信息 内核版本:Linux 4.9 硬件原理: GPIO 通过一颗 MOS 管(2N7002ET1G),接到 LED 负极,LED 正极接电源. GPIO 通过拉高导通 MOS ,将 LED 接地 ...
- 【OpenWRT】增加第三方开源库 - 二维码开源库 zbar
序言 第一次开始写博客,在日常学习和工作当中 CSDN 给我帮助很大,因此我也在 CSDN 奉献自己的经验,借此回馈 CSDN 对我的帮助,希望自己的经验可以帮助需要的人,也方便自己后续复习之用,同时 ...
- React组件渲染触发的条件-归纳总结
一.React组件何时发生渲染--何时会生成React元素? React组件的渲染发生在两个阶段. 1. 组件挂载. 2. 组件更新. 二.React组件更新的触发条件是什么? 对没有实现should ...
- RocketMQ - 生产者原理
https://rocketmq.apache.org/ Apache RocketMQ是一款开源的.分布式的消息投递与流数据平台.出生自阿里巴巴,在阿里巴巴内部经历了3个版本后,作为Apache 顶 ...