Fix #12: No formatting of KeyError arguments.
diff --git a/cachetools/ttlcache.py b/cachetools/ttlcache.py
index b0dbf38..c910d12 100644
--- a/cachetools/ttlcache.py
+++ b/cachetools/ttlcache.py
@@ -42,7 +42,7 @@
     def __getitem__(self, key, cache_getitem=LRUCache.__getitem__):
         value, link = cache_getitem(self, key)
         if link.data[1] < self.__timer():
-            raise KeyError('%r has expired' % key)
+            raise KeyError(key)
         return value
 
     def __setitem__(self, key, value,
diff --git a/tests/test_ttlcache.py b/tests/test_ttlcache.py
index 938d0f2..c1145e5 100644
--- a/tests/test_ttlcache.py
+++ b/tests/test_ttlcache.py
@@ -90,6 +90,17 @@
         self.assertNotIn(2, cache)
         self.assertNotIn(3, cache)
 
+    def test_ttl_tuple_key(self):
+        cache = self.make_ttl_cache(maxsize=1, ttl=0)
+
+        cache[(1, 2, 3)] = 42
+        self.assertEqual(42, cache[(1, 2, 3)])
+        cache.timer.inc()
+        with self.assertRaises(KeyError):
+            cache[(1, 2, 3)]
+        cache.expire()
+        self.assertNotIn((1, 2, 3), cache)
+
     def test_decorator(self):
         self.assertEqual(cached.cache_info(), (0, 0, 2, 0))
         self.assertEqual(cached(1), 1)