[英]Python 3 - raise statement
我目前正在通過Mark Lutz和David Ascher學習Python,我遇到了一段不斷出現錯誤的代碼。 我知道那本書是用Python 2編寫的,與我使用的Pyhton 3不同。 我想知道是否有人知道我的問題的解決方案,因為我到處尋找,但我一直無法找到解決方案。
.........................
MyBad = 'oops'
def stuff( ):
raise MyBad
try:
stuff( )
except MyBad:
print('got it')
基本上, 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)
如果不創建類(至少是空類),則無法引發自定義異常。
您可以使用__init__函數而不是pass來添加自定義文本。
class MyBad(Exception):
pass
# def __init__(self, txt):
# print(txt)
def stuff( ):
raise MyBad('test')
try:
stuff( )
except MyBad:
print('got it')
如果您使用通行證,您將擁有:
得到它了
如果你在評論中使用__init __(),你將擁有
測試並得到它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.