Comparing the solution in the solution space is only good for knowing how far your solution is from the interpolation of the exact solution but this entirely ignores the approximation part of the error, i.e., you won't capture the errors which are simply not seen in V.
The better solution would be to project the exact solution to a higher degree polynomial space and/or finer mesh and evaluate the error there. This also introduces a (higher order) error and which one is better (h- vs. p-refinement) is a matter of the regularity of your solution. Adaptive integration should also work well, but as far as I know there is no such thing yet in FEniCS. It should be possible to implement this with a couple of lines in C++ and interface it in Python though.