@staticmethod
def _get_message(cassette, failed_request):
    """Get the final message related to the exception"""
    best_matches = cassette.find_requests_with_most_matches(failed_request)
    if best_matches:
        best_matches_msg = (
            'Found {} similar requests with {} different matcher(s) :\n'.
            format(len(best_matches), len(best_matches[0][2])))
        for idx, best_match in enumerate(best_matches, start=1):
            request, succeeded_matchers, failed_matchers_assertion_msgs = (
                best_match)
            best_matches_msg += (
                '\n%s - (%r).\nMatchers succeeded : %s\nMatchers failed :\n' %
                (idx, request, succeeded_matchers))
            for failed_matcher, assertion_msg in failed_matchers_assertion_msgs:
                best_matches_msg += '%s - assertion failure :\n%s\n' % (
                    failed_matcher, assertion_msg)
    else:
        best_matches_msg = (
            'No similar requests, that have not been played, found.')
    return (
        """Can't overwrite existing cassette (%r) in your current record mode (%r).
No match for the request (%r) was found.
%s"""
         % (cassette._path, cassette.record_mode, failed_request,
        best_matches_msg))
