return Domain._fromislset(islset, dims)
 
     def sample(self):
-        from .polyhedra import Polyhedron
         islset = self._toislset(self.polyhedra, self.symbols)
         islpoint = libisl.isl_set_sample_point(islset)
+        if bool(libisl.isl_point_is_void(islpoint)):
+            libisl.isl_point_free(islpoint)
+            raise ValueError('domain must be non-empty')
         point = {}
         for index, symbol in enumerate(self.symbols):
             coordinate = libisl.isl_point_get_coordinate_val(islpoint,
                 libisl.isl_dim_set, index)
             coordinate = islhelper.isl_val_to_int(coordinate)
             point[symbol] = coordinate
-        if bool(libisl.isl_point_is_void(islpoint)):
-            point = None
         libisl.isl_point_free(islpoint)
         return point
 
 
 
     def test_sample(self):
         self.assertEqual(self.square6.sample(), {Symbol('x'): 1, Symbol('y'): 3})
-        self.assertEqual(self.empty.sample(), None)
+        with self.assertRaises(ValueError):
+            self.empty.sample()
         self.assertEqual(self.universe.sample(), {})
 
     def test_intersection(self):