def __init__(self, range_str='<STR_LIT>', make_token=AlphanumericVersionToken,<EOL>invalid_bound_error=True):
self._str = None<EOL>self.bounds = []  <EOL>if range_str is None:<EOL><INDENT>return<EOL><DEDENT>try:<EOL><INDENT>parser = _VersionRangeParser(range_str, make_token,<EOL>invalid_bound_error=invalid_bound_error)<EOL>bounds = parser.bounds<EOL><DEDENT>except ParseException as e:<EOL><INDENT>raise VersionError("<STR_LIT>"<EOL>% (range_str, str(e)))<EOL><DEDENT>except VersionError as e:<EOL><INDENT>raise VersionError("<STR_LIT>"<EOL>% (range_str, str(e)))<EOL><DEDENT>if bounds:<EOL><INDENT>self.bounds = self._union(bounds)<EOL><DEDENT>else:<EOL><INDENT>self.bounds.append(_Bound.any)<EOL><DEDENT>
Create a VersionRange object.

        Args:
            range_str: Range string, such as "3", "3+<4.5", "2|6+". The range
                will be optimised, so the string representation of this instance
                may not match range_str. For example, "3+<6|4+<8" == "3+<8".
            make_token: Version token class to use.
            invalid_bound_error (bool): If True, raise an exception if an
                impossible range is given, such as '3+<2'.