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 介绍了在开发过程中如何更方便轻松地记录日志的流程. 整个演讲的内容包括: 为什么日志记录非常重要 日志记录的流程是怎样的 怎样来进行日志记录 ...
随机推荐
- 读python代码-学到的python函数-1
1.with open(data_path,'r') as f: with open()是python用来打开本地文件的,他会在使用完毕后,自动关闭文件,无需手动书写close(). 三种打开模式: ...
- 【Java】线程池梳理
[Java]线程池梳理 前言 线程池:本质上是一种对象池,用于管理线程资源.在任务执行前,需要从线程池中拿出线程来执行.在任务执行完成之后,需要把线程放回线程池.通过线程的这种反复利用机制,可以有效地 ...
- cornerstone4.1破解版 for mac
百度网盘: https://pan.baidu.com/s/1l_0rHMF11mZsUP3qJrp7Uw 密码: 8ei9
- 第一个C程序
写C代码 创建工作区 创建工程 创建文件(.c源文件..h头文件) main函数是程序执行的入口,有且只有一个 函数printf(print function打印函数)[库函数-C语言本身提供给我们使 ...
- Angularjs的工程化
Angularjs的工程化 AMD规范和CMD规范 为什么需要模块化管理工具 在编写项目时可能需要加载很多js文件,若b.js依赖a.js,且a.js比b.js大很多,那么浏览器会让b.js等待a.j ...
- Blazor Hybrid (Blazor混合开发)更好的读取本地图片
在 Blazor Hybrid 应用中,Razor 组件在设备上本机运行. 组件通过本地互操作通道呈现到嵌入式 Web View 控件. 组件不在浏览器中运行,并且不涉及 WebAssembly. R ...
- MySQL-字段约束条件
1.无符号.零填充 1.unsigned:用在生成表的过程中,表示不取负数,只取正数和0,负数会直接报错,eg:id int unsigned. 2.zerofill:用在生成表的过程中,跟在整形2后 ...
- composer 安装 laravel指定版本
composer 安装 laravel指定版本 $ composer create-project --prefer-dist laravel/laravel notelog '7.*'
- zookeeper 部署
官网: https://zookeeper.apache.org/ download 下载完成后 赋值文件到centos /opt/software 单机部署 解压到/opt/module tar ...
- 一个比 Redis 性能更强的数据库
给大家推荐一个比Redis性能更强的数据:KeyDB KeyDB是Redis的高性能分支,侧重于多线程.内存效率和高吞吐量.除了性能改进外,KeyDB还提供主动复制.闪存和子密钥过期等功能.KeyDB ...