zoukankan      html  css  js  c++  java
  • Python触发异常

    我们可以使用raise语句自己触发异常,raise语法格式如下:

    raise [Exception [, args [, traceback]]]

    语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。

    最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。


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

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

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

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

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

    每次执行 raise 语句,都只能引发一次执行的异常。先来测试一下:

    >>> raise
    Traceback (most recent call last):
    File "<pyshell#1>", line 1, in
    raise
    RuntimeError: No active exception to reraise

    >>> raise ZeroDivisionError
    Traceback (most recent call last):
    File "<pyshell#0>", line 1, in
    raise ZeroDivisionError
    ZeroDivisionError

    >>> raise ZeroDivisionError("除数不能为零")
    Traceback (most recent call last):
    File "<pyshell#2>", line 1, in
    raise ZeroDivisionError("除数不能为零")
    ZeroDivisionError: 除数不能为零

    一个实例:

    class Student(object):
    
        def get_score(self):
             return self._score
    
        def set_score(self, value):
            if not isinstance(value, int):
                raise ValueError('score must be an integer!')  # 触发异常后,后面的代码就不会再执行
            if value < 0 or value > 100:
                raise ValueError('score must between 0 ~ 100!')
            self._score = value
    
    >>> s = Student()
    >>> s.set_score(60)  # ok!
    >>> s.get_score()
    60
    >>> s.set_score(9999999)
    Traceback (most recent call last):
      ...
    ValueError: score must between 0 ~ 100!
    
  • 相关阅读:
    ios swift模仿qq登陆界面,xml布局
    类和结构体的区别
    获取或者设置时,无后缀和A后缀和W后缀的区别
    mfc控件学习
    MFC之简单计算器
    双冒号、点操作、箭头的区别
    MFC使用MsComm做串口通信
    保存结构体到本地(二进制)
    文件管理函数
    文件定位的几个函数
  • 原文地址:https://www.cnblogs.com/wangzheming35/p/15102530.html
Copyright © 2011-2022 走看看