I think in GUI programming this scheme is correct. One action failed should not affect the running of GUI.
 
In the FEM computation is a little different.
After equation assembly, a linear equation Ax=b has to be solved.
If A is singular, or the chosen of solver type or preconditoner type is not applicable, solving of Ax=b is therefore not possible. As a result, there is no need to keep program running because there will be no solution at all.    
 
In the current PR PETScLinearSolver::solve(...) == false states that the number of iteration exceeds  the maximum one but the solver does not have fatal problem, and a solution has been obtained for check. For the return type  of this function, it is still open to discuss.