一、raise函数的作用

抛出自定义的异常,stackoverflow社区里面常说的“Manually raising (throwing) an exception in Python”,这个manually解释的就很到位,是人工的,自己定义的异常。
有的人可能就感觉很奇怪了,我想让程序好好运行还来不及,怎么还想着运行错误呢?事实上,异常的种类有很多,对于python这个语言来说不是异常,但对于使用者或者programmer来说就是异常。举个简单例子,比如需要做个年龄输入,对于python来说,输入整数,小数都没有限制(只要programmer不限制)。但是从实际出发,不可能有小数的年纪。

二、raise函数使用举例

(1)raise函数常规使用方法举例

try:raise Exception
except Exception:#在这个输入遇到异常时的代码

**注意:**1)如果不使用try…except这种形式,那么直接抛出异常,不会执行后续代码。笔者认为这可能受制于python是解释性语言的原因。2)其中的Exception可以替换为各种系统内建错误。那么有哪些内建错误呢?在python中可以查看python官方文档,这个网站上详细给出了各种类型错误;或者在Google里面搜索“python built in exception”,都可以看到详细的系统内建的错误。
(2)运用raise函数抛出自定义异常


created by xiaolong date:2021年05月07日
class ValueError(Exception):def __init__(self, age):self.age = agedef __str__(self):return str(self.age)age = input('请输入年龄:')
try:if int(age) < 0:*raise ValueError*
except ValueError as VE:print("输入的年龄小于零啦,age =", VE)

用法小结:1)raise后面可以直接跟一个class名,但是这个class必须是Exception的子类。2)__str__函数可以返回想要显示给用户的值。
(3)raise函数的一些其他用法
上面两种用法是常用的一些用法,下面介绍一些其他不同的raise抛出异常的语法。在stackoverflow问答这个网站里面介绍会比较详细。
1)只有一个raise

def somefunction():print("some cleaning")a=10
b=0
result=Nonetry:result=a/bprint(result)except Exception:            #Output ->somefunction()           #some cleaningraise                    #Traceback (most recent call last):#File "python", line 8, in <module>#ZeroDivisionError: division by zero

这里面就用到了一个单raise,他会自动re-raise,再次抛出上一个exception(异常)。如果先前没有异常,那么他就会抛出typeerror exception。
2)raise exception (args) from original_exception

class MyCustomException(Exception):passa=10
b=0
reuslt=None
try:try:result=a/bexcept ZeroDivisionError as exp:print("ZeroDivisionError -- ",exp)raise MyCustomException("Zero Division ") from expexcept MyCustomException as exp:print("MyException",exp)print(exp.__cause__)

输出结果:

ZeroDivisionError --  division by zero
MyException Zero Division
division by zero

这个raise exception (arg) from original_exception,作用是:exception能够从original_exception获取更多的信息。

三、需要注意的要点以及推荐用法

(1)需要注意的要点
1)可能会隐藏bug

def demo_bad_catch():try:raise ValueError('Represents a hidden bug, do not catch this')raise Exception('This is the exception you expect to handle')except Exception as error:print('Caught this error: ' + repr(error))>>> demo_bad_catch()
Caught this error: ValueError('Represents a hidden bug, do not catch this',)

要点:避免使用非常概括的exception(比如上面例子中的ValueError),而使用比较具体的exception。
2)精确的except子句不会抓住非常概括的exception。

def demo_no_catch():try:raise Exception('general exceptions not caught by specific handling')except ValueError as e:print('we will not catch exception: Exception')>>> demo_no_catch()
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "<stdin>", line 3, in demo_no_catch
Exception: general exceptions not caught by specific handling

(2)推荐用法
1)raise句子可以给随性所欲的arg,可以用好这些arg

raise ValueError('A very specific bad thing happened', 'foo', 'bar', 'baz')
try:some_code_that_may_raise_our_value_error()
except ValueError as err:print(err.args)output:
('message', 'foo', 'bar', 'baz')

2)最好不要修改error。
你可以使用sys.exc_info()记录错误发生的type,, value,traceback,但是需要引用sys库。(语句为import sys)。最好不要修改sys.exc_info()中的内容,如果确实要修改可以把修改前的值赋给arg,保留在exception中。

import sys
def error():raise ValueError('oops!')def catch_error_modify_message():try:error()except ValueError:error_type, error_value, traceback = sys.exc_info()print(error_type, error_value, traceback)
catch_error_modify_message()

python 【raise函数】相关推荐

  1. python raise函数_Python raise用法

    有读者可能会问,编写代码时能否手动抛出一个异常吗?答案是肯定的,Python 允许程序自行引发异常,使用 raise 语句即可. 异常是一种很"主观"的说法,以下雨为例,假设大家约 ...

  2. python raise函数

    if self._latname == 'infer':if 'lat' in d.dims:self._latname = 'lat'elif 'latitude' in d.dims:self._ ...

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

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

  4. exit函数_全面深入了解 Python 魔法函数

    (点击上方公众号,可快速关注一起学Python) 作者:浪子燕青       链接: http://www.langzi.fun/Python魔法函数.html 魔法函数概念 魔法函数是以双下划线开头 ...

  5. python所有函数用法_python函数用法总结

    空函数 如果想定义一个什么事也不做的空函数,可以用pass语句: def nop(): pass pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码 ...

  6. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

  7. python函数调用的例子_实例讲解Python中函数的调用与定义

    调用函数: #!/usr/bin/env python3 # -*- coding: utf-8 -*- # 函数调用 >>> abs(100) 100 >>> a ...

  8. Python help 函数 - Python零基础入门教程

    目录 一.Python help 函数简介 二.Python help 函数使用 1.查看内置函数的帮助信息 2.查看数据类型的帮助信息 三.猜你喜欢 基础 Python 学习路线推荐 : Pytho ...

  9. Python 没有函数重载?如何用装饰器实现函数重载?

    摘要:Python 不支持函数重载.当我们定义了多个同名的函数时,后面的函数总是会覆盖前面的函数,因此,在一个命名空间中,每个函数名仅会有一个登记项(entry). 本文分享自华为云社区<为什么 ...

最新文章

  1. Debain 7.2安装配置
  2. linux 配置 java 环境变量
  3. spring的xml配置文件出现故障
  4. js获取当前系统时间
  5. app式成语_疯狂的成语app
  6. LeetCode 399. 除法求值(图的DFS搜索)
  7. 无接触式智能服务 用“减法”重塑企业前台场景
  8. Python知识点之Python面向对象
  9. 计算机专业课教学,计算机专业课教学的原则和方法
  10. python自动化办公都能做什么-盘点使用Python进行自动化办公所需要的知识点
  11. Material Design使用集合
  12. paip.软件版本完善计划C426fromVC423
  13. python dicom 三维重建_DICOM HTML5 Viewer中的真三维重建
  14. vue组件 组件的继承extend
  15. 【无标题】输入圆锥体半径r以及高度h,并计算它的体积。
  16. PHP图片尺寸调整(全填充,没有黑底)
  17. Datawhale组队学习之MySQL-task2
  18. Cardano(ADA), EOS, RChain(RHOC), Aeternity(AE) 都是极其好的币
  19. Neo4j图数据库 批量写入与查询
  20. 阿里云安装部署Oracle11g 详细教程

热门文章

  1. 有没有必要买ipad手写笔?ipad手写笔哪个品牌好
  2. First and foremost
  3. hdu1072翻译火星文(未解决)
  4. 设计神器,有了这些配色网站,你的作品会高人一等
  5. Python网络协议编程之HTTP协议详解
  6. html页面创建二维数组,二维数组怎么理解
  7. java小项目:危险品检测
  8. 重庆对口高职计算机类专业答案2020,2020年重庆市高职分类考试汽车类专业招生试题及答案...
  9. 沁恒RISC-V开发板CH32V103-EVT评测~
  10. Python爬虫实现12306火车票查询