diff --git a/lib/puppet/pops/evaluator/evaluator_impl.rb b/lib/puppet/pops/evaluator/evaluator_impl.rb
index <HASH>..<HASH> 100644
--- a/lib/puppet/pops/evaluator/evaluator_impl.rb
+++ b/lib/puppet/pops/evaluator/evaluator_impl.rb
@@ -75,7 +75,14 @@ class Puppet::Pops::Evaluator::EvaluatorImpl
   # @api
   #
   def evaluate(target, scope)
-    @@eval_visitor.visit_this_1(self, target, scope)
+    begin
+      @@eval_visitor.visit_this_1(self, target, scope)
+    rescue StandardError => e
+      if e.is_a? Puppet::ParseError
+        raise e
+      end
+      fail(Issues::RUNTIME_ERROR, target, {:detail => e.message}, e)
+    end
   end
 
   # Polymorphic assign - calls assign_TYPE
(#<I>) Produce meaningful output for all runtime errors

This adds a catch around the evaluate method to ensure that generic
errors fail with meaningful information.