2017-03-22 70 views
1

我有一個這樣的文件:Python的類型錯誤: 'MyException' 對象不是可調用

# filename: auth.py 

class DisabledAccountError(Exception): 
    def __init__(self, uid): 
     self.uid = uid 

    def __str__(self): 
     return repr(self.uid) 


class DeletedAccountError(Exception): 
    def __init__(self, uid): 
     self.uid = uid 

    def __str__(self): 
     return repr(self.uid) 

def login_validation(account): 
    if login_info.status == OBJECT_STATUS_DISABLED: 
     raise DisabledAccountError(login_info.uid) # this is line 426 

    if login_info.status == OBJECT_STATUS_DELETED: 
     raise DeletedAccountError(login_info.uid) 

但有時,服務器會報告某些錯誤是這樣的:

但堆棧跟蹤很奇怪:

TypeError: 'DeletedAccountError' object is not callable 
    File "xxxxxx.py", line 104, in login_validation 
    login_info = auth.login_validation(account) 
    File "auth.py", line 426, in login_validation 
    raise DisabledAccountError(login_info.uid) 

這個錯誤是怎麼發生的?

爲什麼錯誤是DeletedAccountError但棧跟蹤是DisabledAccountError

我不能自己重現錯誤。我都試圖禁用一個帳戶並刪除一個帳戶。但它確實發生在我們的生產服務器上。

+0

我們在多線程和多進程中使用'uwsgi'。 – Dozer

+0

這確實很奇怪。你確定代碼的其餘部分沒有什麼與你的問題相關嗎?這真的是完整的追溯? – Schmuddi

回答

0

我們發現的根案例:

try: 
    # some code 
except auth.DeletedAccountError, auth.DisabledAccountError: 
    pass 

那麼愚蠢。

+0

好的拼圖。顯然你使用的是Python 2,因爲在Python 3中不再支持'ExceptionType,errorvar:'的語法。你能抽出時間來說明發生了什麼,爲了其他人的利益嗎? – alexis

相關問題