Python 3 - 提高声明

时间:2017-05-22 14:11:23

标签: python raise

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

.........................

MyBad = 'oops'

def stuff( ):
    raise MyBad

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

2 个答案:

答案 0 :(得分:9)

基本上,MyBad不是例外,raise语句只能用于例外。

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

class MyBad(Exception):
    pass

def stuff( ):
    raise MyBad

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

输出:

got it

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

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))

输出:

got it (Your bad)

答案 1 :(得分:2)

如果不创建类(至少是空类),则无法引发自定义异常。

您可以使用__init__函数代替pass:

添加自定义文本
class MyBad(Exception):
    pass
    # def __init__(self, txt):
    #     print(txt)

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

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

如果你使用pass,你将拥有:

  

得到它

如果您在评论中使用__init __(),则会有

  

测试并得到它