精华内容
下载资源
问答
  • raise学习

    2018-09-01 13:31:59
    如果要明确的触发异常,可以通过raise语句。 raise语句的格式为: raise class #make and raise instance of class:makes an instance raise instance #最常用的情况,等价于 raise class() raise #如果你需要...

    如果要明确的触发异常,可以通过raise语句。

    raise语句的格式为:

    raise class  #make and raise instance of class:makes an instance

    raise instance #最常用的情况,等价于     raise class()

    raise  #如果你需要捕获并处理异常但不希望异常在代码中死亡,通常会使用

     

    #raise class
    try:
        raise IndexError 
    except IndexError:
        print(" got exception")
    
    
    #raise instance
    class AlreadyGotOne(Exception):
        pass
    
    def grail():
        raise AlreadyGotOne()   #raise an instance
    
    try:
        grail()
    
    except AlreadyGotOne:       #catch class name
        print("got exception")
        
    #raise 
    try:
        raise IndexError("spam")
    except IndexError:
        print("propagating")
        raise

    重要!!!

    异常一旦被捕获就会立刻死亡,除非他被另一个raise语句或错误引发

     

    #关于raise的关键#

    它可以自动引发异常!!!!

     

    #raise...from...#

    异常有时候会在回应其他异常时被触发,为了自发的实现异常链。python支持:

    raise newexception from oldexception

    • 初步了解:当raise中明确使用from时,from后面的表达式指定另一个异常类或实例,以附加到引发的新异常的__cause__属性
    try:
        1/0
    except Exception as E:
        raise TypeError("Bad") from E        
    • 拓展:不通过raise...from...也可以实现异常链
    try:
        1/0
    except:
        badname
    • 避免链性异常的方法:raise newexception from None
    展开全文
  • python raise

    2020-05-16 20:44:43
    当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。 演示raise用法 try: s = None if s is None: print "s 是空对象" raise Name...

    当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。

    演示raise用法

    try:
         s = None
         if s is None:
             print "s 是空对象"
             raise NameError     #如果引发NameError异常,后面的代码将不能执行
         print len(s)  #这句不会执行,但是后面的except还是会走到
    except TypeError:
         print "空对象没有长度"
     
    s = None
    if s is None:
        raise NameError 
    print 'is here?' #如果不使用try......except这种形式,那么直接抛出异常,不会执行到这里

    触发异常

    我们可以使用raise语句自己触发异常

    raise语法格式如下:

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

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

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

    实例

    一个异常可以是一个字符串,类或对象。 Python的内核提供的异常,大多数都是实例化的类,这是一个类的实例的参数。

    定义一个异常非常简单,如下所示:

    def functionName( level ):
        if level < 1:
            raise Exception("Invalid level!", level)
            # 触发异常后,后面的代码就不会再执行

    注意:为了能够捕获异常,"except"语句必须有用相同的异常来抛出类对象或者字符串。

    例如我们捕获以上异常,"except"语句如下所示:

    try:
        正常逻辑
    except Exception,err:
        触发自定义异常    
    else:
        其余代码

    实例

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    # 定义函数
    def mye( level ):
        if level < 1:
            raise Exception,"Invalid level!"
            # 触发异常后,后面的代码就不会再执行
    try:
        mye(0)            # 触发异常
    except Exception,err:
        print 1,err
    else:
        print 2

    执行以上代码,输出结果为:

    $ python test.py 
    1 Invalid level!
    
    python3.6以后 改为
    
    def mye( level ):
        if level < 1:
            raise Exception("Invalid level!")
            # 触发异常后,后面的代码就不会再执行
    try:
        mye(0)            # 触发异常
    except Exception as err:
        print(1,err)
    else:
        print(2)

     

    展开全文
  • Python 中 raiseraise/from 的区别

    千次阅读 2018-11-21 11:50:15
    Python 中 raiseraise/from 的使用方法 文章目录Python 中 raiseraise/from 的使用方法0. 参考资料1. 代码比较2. 用法解释2.1 raise2.2 raise A from B3. 总结 0. 参考资料 Python “raise from” ...

    Python 中 raise 和 raise/from 的使用方法



    0. 参考资料


    1. 代码比较

    今天在看《Effective Python》的时候第一次见到 raise A from B 的用法,所以在网上查了一下。
    下面用代码比较一下 raiseraise/from 的区别。

    • raise.py
    # raise
    try:
        raise ValueError
    except Exception as e:
        raise IndexError
    """
    Traceback (most recent call last):
      File "raise.py", line 3, in <module>
        raise ValueError
    ValueError
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "raise.py", line 5, in <module>
        raise IndexError
    IndexError
    """
    
    
    • raisefrom.py
    # raise/from
    try:
        raise ValueError
    except Exception as e:
        raise IndexError from e
    """
    Traceback (most recent call last):
      File "raisefrom.py", line 3, in <module>
        raise ValueError
    ValueError
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "raisefrom.py", line 5, in <module>
        raise IndexError from e
    IndexError
    """
    
    

    上面的 raiseraise/from 都是放在 except 异常处理块中的。
    可以观察到 raiseraise/from 最大的区别是异常提示信息不一样:

    • raise 是:During handling of the above exception, another exception occurred:
      即“在处理上面的异常时,发生了另外一个异常:”。
    • raise/from 是:The above exception was the direct cause of the following exception:
      即“上面的异常是接下来的异常的直接原因:”。

    2. 用法解释

    2.1 raise

    当在 except 块或者 finally 块中出现异常时(包括使用单独的 raise 重新抛出异常的情况),之前的异常会被附加到新异常的 __context__ 属性上

    except 块中的语句叫做异常处理器 exception handler,它们是处理异常的语句。

    而在其他任何地方抛出异常,都不会设置 __context__ 属性。
    这样打印出来的异常信息就会包含这么一句话:During handling of the above exception, another exception occurred:


    2.2 raise A from B

    raise A from B 语句用于连锁 chain 异常。
    from 后面的 B 可以是:

    • 异常类
    • 异常实例
    • NonePython 3.3 的新特性)

    如果 B 是异常类或者异常实例,那么 B 会被设置为 A__cause__ 属性,表明 A异常 是由 B异常 导致的。
    这样打印出来的异常信息就会包含这样一句话:The above exception was the direct cause of the following exception:
    与此同时,在 Python 3.3A异常__suppress_context__ 属性会被设置为 True,这样就抑制A异常__context__ 属性,即忽略 __context__ 属性。
    于是 Python不会自动打印异常上下文 exception context,而是使用 __cause__ 属性来打印异常的引发者。

    Python 3.3 中,B 还可以是 Noneraise A异常 from None
    这样相当于把 __suppress_context__ 属性设置为 True,从而禁用了 __context__ 属性,Python 不会自动展示异常上下文。
    比如下面这段代码,注意到只显示了 IndexError 一个异常信息:
    raisefromnone.py

    # raise ... from None
    # 禁用异常上下文属性
    try:
        raise ValueError
    except Exception as e:
        raise IndexError from None
    """
    Traceback (most recent call last):
      File "raisefromnone.py", line 6, in <module>
        raise IndexError from None
    IndexError
    """
    
    

    3. 总结

    except 或者 finally 块中使用 raiseraise/from 语句需要注意:

    • raise 会设置后面异常的 __context__ 属性为前面的异常。
      异常信息中会有 During handling of the above exception, another exception occurred:
    • raise A异常 from B异常 会把 A异常__cause__ 属性设置为 B异常
      同时设置 __suppress_context__ 属性为 True,从而忽略 __context__ 属性,不打印异常上下文信息。
      异常信息中会有 The above exception was the direct cause of the following exception:
    • raise A异常 from None 会设置 A异常__suppress_context__ 属性为 True,这样会忽略它的 __context__ 属性,不会自动显示异常上下文信息。

    完成于 2018.11.21

    展开全文
  • raise NotImplementedError

    千次阅读 2019-12-17 20:55:03
    Python编程中raise可以实现报出错误的功能,而报错的条件可以由程序员自己去定制。在面向对象编程中,可以在父类中先预留一个方法接口不实现,在其子类中实现。如果要求其子类一定要实现,不实现的时候会导致问题,...

     Python编程中raise可以实现报出错误的功能,而报错的条件可以由程序员自己去定制。在面向对象编程中,可以在父类中先预留一个方法接口不实现,在其子类中实现。如果要求其子类一定要实现,不实现的时候会导致问题,那么采用raise的方式就很好。而此时产生的问题分类是NotImplementedError。

    示例:

    class FatherClass:
      def func(self):
        raise NotImplementedError("ERROR: func not implemented!")
    
    class ChildClass(FatherClass):
      pass
    
    obj = ChildClass()
    obj.func()

    在以上例子中,子类没有实现父类中的func函数,在用子类生成类对象的时候不会出错,但在调用父类的func函数的时候,会爆出以下错误:

    Traceback (most recent call last):
      File "/media****/test.py", line 111, in <module>
        obj.func()
      File "/media****/test.py", line 104, in func
        raise NotImplementedError("ERROR: func not implemented!")
    NotImplementedError: ERROR: func not implemented!

    即,在调用父类的func函数时,python会自动识别该函数有没有在子类中被实现。

    要改正以上错误只需要在子类中实现父类的func函数就行了,如下:

    class FatherClass:
      def func(self):
        raise NotImplementedError("ERROR: func not implemented!")
    
    class ChildClass(FatherClass):
      def func(self):
        print("hello world!")
    
    obj = ChildClass()
    obj.func()

    运行结果如下:

    hello world!

     

    展开全文
  • 简介当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。1、演示raise用法try:s = noneif s is none:print("s 是空对象")# 如果引发nameerror...
  • 理解raise in Python

    2021-01-23 09:28:28
    raise statement raise_stmt ::= "raise" [expression ["from" expression]] If no expressions are present, raise re-raises the last exception that was active in the current scope. Two ways for use # ...
  • raise控件5

    热门讨论 2012-04-24 14:37:01
    raise控件,version 5 ,支持delphi2010
  • python raise用法

    2021-03-30 11:18:22
    raise的应用场景: 是否可以在程序的指定位置手动抛出一个异常? 答案是肯定的,Python 允许我们在程序中手动设置异常,使用 raise 语句即可。 你可能会疑惑,从来都是想方设法地让程序正常运行,怎么还要手动设置...
  • raiseraise ... from 的区别 起步 Python 的 raiseraise from 之间的区别是什么? try: print(1 / 0) except Exception as exc: raise RuntimeError("Something bad happened"...
  • raise TemplateDoesNotExist

    2018-06-07 16:57:00
    raise TemplateDoesNotExist(template_name, chain=chain)django.template.exceptions.TemplateDoesNotExist: login.html 在settings.py中的 TEMPLATES =加入 'DIRS': [os.path.join(BASE_DIR, "templates"),.....
  • raise语句

    2015-10-30 14:53:00
    # -*- coding: utf-8 -*- #python 27 ...#raise语句 res=[IndexError,TypeError] #raise res[0] raise IndexError ''' Traceback (most recent call last): File "C:\Users\...
  • raise函数

    千次阅读 2015-03-27 15:41:28
    功 能: 向正在执行的程序发送一个信号#include int raise( int signal );SIGABRT 终止错误 SIGFPE 浮点错误 SIGILL 无效指令 SIGINT 用户输入 SIGSEGV 非法内存存取 SIGTERM 终止程序
  • Python raise用法

    2020-07-20 09:08:39
    答案是肯定的,Python 允许我们在程序中手动设置异常,使用 raise 语句即可。 读者可能会感到疑惑,即我们从来都是想方设法地让程序正常运行,为什么还要手动设置异常呢?首先要分清楚程序发生异常和程序执行错误,...
  • python raise 异常

    千次阅读 2018-11-09 16:41:28
    raise() 用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类。 抛出异常和自定义异常 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常。...
  • Python之raise

    2019-07-04 21:11:23
    Python之raise 异常触发 在Python中通常使用raise语句来触发异常; raise语法格式如下: 语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。 最后一个参数是...
  • postgresql raise 用法

    2019-05-28 20:33:13
    raise notice ‘this is raise demo , param1 is % ,param2 is %’,param1,param2;
  • raise和abort函数

    2019-11-06 19:51:22
    raise和abort函数 raise函数: 给当前进程发送指定信号(自己给自己发) raise(signo)==kill(getpid(),signo); int raise(int sig); 成功:0,失败非0值 abort函数: 给自己发送异常终止信号 6)SIGABRT信号,终止并...
  • Python学习:raise语句

    万次阅读 多人点赞 2019-02-01 00:03:28
    raise语句1. raise语句2. 特殊情况 1. raise语句 为了引发异常,可以使用一个类(应该是Exception的子类)或者实例参数调用raise语句。 raise语法格式如下: raise [Exception [, args [, traceback]]] ...
  • qt raise lower方法

    2020-12-18 12:16:23
    void QWindow::raise() Raise the window in the windowing system. Requests that the window be raised to appear above other windows. 在window系统中Raise这个窗口 请求将窗口提升到显示在其他窗口之上。...
  • raise Exception

    千次阅读 2015-02-24 15:39:53
    def compare(num): a = 50 if num raise Exception('ERROR:The number must over 0') if num > a: print(num,'is bigger than 50')
  • python中raise使用心得

    千次阅读 2019-06-25 20:37:13
    当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。
  • Python中raise用法

    2020-10-27 20:16:22
    答案是肯定的,Python允许我们在程序中手动设置异常,使用 raise 语句即可。 读者可能会感到疑惑,即我们从来都是想方设法地让程序正常运行,为什么还要手动设置异常呢?首先要分清楚程序发生异常和程序执行错误,...
  • python raise的用法

    2020-02-14 13:41:23
    有关于python里raise显示引发异常的方法: 当程序出错时,python会自动触发异常,也可以通过raise显示引发异常 一旦执行了raise语句,raise之后的语句不再执行 如果加入了try,except,那么except里的语句会被执行 try...
  • Oracle raise

    千次阅读 2011-11-08 17:52:07
    异常的抛出    由三种方式抛出异常   1....  2. 使用Raise语句  ... 3. 调用RAISE_APPLICATION_ERROR存储过程 ... 当数据库或PL/SQL在运行...异常也可以通过Raise语句抛出Raise exception_name;   显式抛出异常是

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 215,300
精华内容 86,120
关键字:

raise