I propose that errors.AccessError.__init__ be changed to the following: def __init__ (self, msg=''): self.msg = msg or "Access denied" When you have 'msg=None', and you do 'raise AccessError', you wind up with an exception whose __str__ returns None and crashes when you try to print it.