Error handling techniques for nested methods that can throw exceptions
If shortly, using exceptions is not a code-smell.



In my opinion using bool return values is appropriate for methods that are purposed for checking some conditions. Examples:

bool CanFunc2BeCalled() {  ... }
bool TryParse(string s, out ... value) { ... }


Such methods specifically designed to return bool. It is the main job they do.

If a method should perform some actions and during its execution an exception can be occured I would not return bool to indicate a failure. An exception is the right choice for these cases.

Exceptions is a native conception of .NET so don't be afraid of them :) Also with good XML comment on methods you always know what exceptions the method can throw:

///&lt;summary&gt;
///...
///&lt;/summary&gt;
///&lt;exception cref="InvalidOperationException"&gt;Description of failure.&lt;/exception&gt;
void Func2() { ... }


So if you are able to check that call of a method can cause an exception before its execution, create the method for checking some conditions and call it before:

private bool CanFunc2BeCalled() {  ... }

public void Func1()
{
    if (!CanFunc2BeCalled())
        return;

    Func2();    
}


But if you can't check if the Func2 can be safely called before its execution then dealing with exceptions is a good way and I would stick with it.