Fix two issues in the weak set implementation.
diff --git a/Lib/_weakrefset.py b/Lib/_weakrefset.py
index e56ac04..a6827e8 100644
--- a/Lib/_weakrefset.py
+++ b/Lib/_weakrefset.py
@@ -41,7 +41,10 @@
 
     def pop(self):
         while True:
-            itemref = self.data.pop()
+            try:
+                itemref = self.data.pop()
+            except KeyError:
+                raise KeyError('pop from empty WeakSet')
             item = itemref()
             if item is not None:
                 return item
@@ -107,5 +110,5 @@
     __ixor__ = symmetric_difference_update
 
     def union(self, other):
-        self._apply_mutate(other, self.data.union)
+        return self._apply(other, self.data.union)
     __or__ = union