2017-03-22 103 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

相关问题