首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 3- raise语句

Python 3- raise语句
EN

Stack Overflow用户
提问于 2017-05-22 22:11:23
回答 2查看 14.5K关注 0票数 3

我目前正在学习Mark Lutz和David Ascher的Python,我遇到了一段不断出现错误的代码。我知道那本书是用Python2写的,不像我用的Pyhton 3。我想知道是否有人知道我的问题的解决方案,因为我到处寻找,但我一直无法找到解决方案。

..

代码语言:javascript
复制
MyBad = 'oops'

def stuff( ):
    raise MyBad

try:
    stuff( )
except MyBad:
    print('got it')
EN

回答 2

Stack Overflow用户

发布于 2017-05-22 22:16:42

基本上,MyBad不是异常,raise语句只能与异常一起使用。

要使MyBad成为异常,必须使其扩展Exception的子类。例如,下面的代码将起作用:

代码语言:javascript
复制
class MyBad(Exception):
    pass

def stuff( ):
    raise MyBad

try:
    stuff( )
except MyBad:
    print('got it')

输出:

代码语言:javascript
复制
got it

但是,最好是引发异常类的实例,而不是类本身,因为它允许使用参数,通常是描述错误的参数。下面的示例说明了这一点:

代码语言:javascript
复制
class MyBad(Exception):
    def __init__(self, message):
        super().__init__()
        self.message = message

def stuff(message):
    raise MyBad(message)

try:
    stuff("Your bad")
except MyBad as error:
    print('got it (message: {})'.format(error.message))

输出:

代码语言:javascript
复制
got it (Your bad)
票数 12
EN

Stack Overflow用户

发布于 2017-05-22 22:34:06

如果不创建类(至少是一个空类),就不能引发自定义异常。

您还可以通过使用__init__函数而不是pass来添加自定义文本:

代码语言:javascript
复制
class MyBad(Exception):
    pass
    # def __init__(self, txt):
    #     print(txt)

def stuff( ):
     raise MyBad('test')

try:
    stuff( )
except MyBad:
    print('got it')

如果使用pass,您将拥有:

得到了它

如果在注释中使用__init__(),您将拥有

测试并获得了

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44115100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档