Simplify usage of LZMAFile's fileobj support, like with BZ2File.
diff --git a/Lib/lzma.py b/Lib/lzma.py
index 1c101f7..8fb3f03 100644
--- a/Lib/lzma.py
+++ b/Lib/lzma.py
@@ -46,13 +46,12 @@
     """
 
     def __init__(self, filename=None, mode="r", *,
-                 fileobj=None, format=None, check=-1,
-                 preset=None, filters=None):
-        """Open an LZMA-compressed file.
+                 format=None, check=-1, preset=None, filters=None):
+        """Open an LZMA-compressed file in binary mode.
 
-        If filename is given, open the named file. Otherwise, operate on
-        the file object given by fileobj. Exactly one of these two
-        parameters should be provided.
+        filename can be either an actual file name (given as a str or
+        bytes object), in which case the named file is opened, or it can
+        be an existing file object to read from or write to.
 
         mode can be "r" for reading (default), "w" for (over)writing, or
         "a" for appending.
@@ -119,16 +118,16 @@
         else:
             raise ValueError("Invalid mode: {!r}".format(mode))
 
-        if filename is not None and fileobj is None:
+        if isinstance(filename, (str, bytes)):
             mode += "b"
             self._fp = open(filename, mode)
             self._closefp = True
             self._mode = mode_code
-        elif fileobj is not None and filename is None:
-            self._fp = fileobj
+        elif hasattr(filename, "read") or hasattr(filename, "write"):
+            self._fp = filename
             self._mode = mode_code
         else:
-            raise ValueError("Must give exactly one of filename and fileobj")
+            raise TypeError("filename must be a str or bytes object, or a file")
 
     def close(self):
         """Flush and close the file.