I tend to encapsulate only the logic that will throw an exception inside a try-catch as possible, rather than squeezing in the entire logic of a method into the catch block with the catch handling "any" exceptions in the trailing end of the method. I'm not sure what benefits this truly brings but for me this is just out of habit.
As for handling of exceptions I think the Patterns and Practices group have advice on how to render errors in webparts, and you could also use System.Trace.Write for writing debug data to the trace log for monitoring.