def route(self, msg):
        k = self._digest(msg)
        
        if isinstance(k, (tuple, list)):
            key, args = k[0], k[1:]
        else:
            key, args = k, ()
        
        try:
            fn = self._table[key]
        except __HOLE__ as e:
            # Check for default handler, key=None
            if None in self._table:
                fn = self._table[None]
            else:
                raise RuntimeError('No handler for key: %s, and default handler not defined' % str(e.args))
        
        fn(msg, *args)
dataset/ETHPy150Open nickoala/telepot/telepot/helper.py/Router.route