I'd rather not have this blow up if the msg contains invalid unicode.
Should we just repr the msg? Or maybe just have the whole error message be bytes?