Why don't you use some TRY...CATCH... blocks?
Here's an example:
DECLARE @i int, @Error varchar(100) = ''
BEGIN TRY
SET @i = 'a'
END TRY
BEGIN CATCH
SET @Error = @Error + CHAR(13) + ERROR_MESSAGE()
END CATCH
IF LEN(@Error) > 0
SELECT 'Conversion errors: ' + @Error