我目前正在通过Mark Lutz和David Ascher学习Python,我遇到了一段不断出现错误的代码。我知道那本书是用Python 2编写的,与我使用的Pyhton 3不同。我想知道是否有人知道我的问题的解决方案,因为我到处寻找,但我一直无法找到解决方案。
.........................
MyBad = 'oops'
def stuff( ):
raise MyBad
try:
stuff( )
except MyBad:
print('got it')
答案 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 __(),则会有
测试并得到它