python - How to inherit from an exception to create a more specific Error? -


i'm using third party api emits httperror.

by catching error can inspect http response status , narrow down problem. emit more specific httperror i'll dub backenderror , ratelimiterror. latter has context variables added.

how create custom exception inherits httperror , can created without losing original exception?

the question polymorphism 101 head fuzzy today:

class backenderror(httperror):     """the google api having it's own issues"""     def __init__(self, ex):         # super doesn't seem right because have         # exception. surely don't need extract         # relevant bits ex , call __init__ again?!         # self = ex   # doesn't feel right either   try:      stuff() except httperror ex:      if ex.resp.status == 500:          raise backenderror(ex) 

how catch original httperror , encapsulate still recognisable both httperror , backenderror?

if @ actual definition of googleapiclient.errors.httperror,

__init__(self, resp, content, uri=none)  

so, after inheriting need initialize base class values.

class backenderror(httperror):     """the google api having it's own issues"""     def __init__(self, resp, content, uri=none):         # invoke super class's __init__         super(backenderror, self).__init__(resp, content, uri)          # customization can done here 

and when catch error,

except httperror ex:      if ex.resp.status == 500:          raise backenderror(ex.resp, ex.content, ex.uri) 

if don't want client explicitly unpack contents, can accept httperror object in backenderror's __init__ , can unpacking, this

class backenderror(httperror):     """the google api having it's own issues"""     def __init__(self, ex):         # invoke super class's __init__         super(backenderror, self).__init__(ex.resp, ex.content, ex.uri)          # customization can done here 

and can do

except httperror ex:      if ex.resp.status == 500:          raise backenderror(ex)