簡體   English   中英

Python 3 - 提高聲明

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM