def METHOD_NAME(survey_job: SurveyJob) -> SurveyJob:
    """Runs a survey job and handles errors."""
    survey_job = _start_job(survey_job)
    try:
        surveyor = _get_surveyor_for_source(survey_job)
    except SourceNotSupportedError as e:
        logger.error("Unable to run Survey Job because: %s", e, survey_job=survey_job.id)
        _end_job(survey_job, False)
        return survey_job
    try:
        job_success = surveyor.survey(source_type=survey_job.source_type)
    except Exception as e:
        logger.exception("Exception caught while running Survey Job.", survey_job=survey_job.id)
        survey_job.failure_reason = str(e)
        job_success = False
    survey_job = _end_job(survey_job, job_success)
    return survey_job