我目前正在学习Mark Lutz和David Ascher的Python,我遇到了一段不断出现错误的代码。我知道那本书是用Python2写的,不像我用的Pyhton 3。我想知道是否有人知道我的问题的解决方案,因为我到处寻找,但我一直无法找到解决方案。
..
MyBad = 'oops'
def stuff( ):
raise MyBad
try:
stuff( )
except MyBad:
print('got it')发布于 2017-05-22 22:16:42
基本上,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)发布于 2017-05-22 22:34:06
如果不创建类(至少是一个空类),就不能引发自定义异常。
您还可以通过使用__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__(),您将拥有
测试并获得了
https://stackoverflow.com/questions/44115100
复制相似问题