def __init__(self, angle=None, angleType=None):
        """
        Initializes an angle.

        @param angle: The value of the angle in decimal degrees. (L{None} if
            unknown).
        @type angle: C{float} or L{None}

        @param angleType: A symbolic constant describing the angle type. Should
            be one of L{Angles} or {None} if unknown.

        @raises ValueError: If the angle type is not the default argument,
            but it is an unknown type (not in  C{Angle._RANGE_EXPRESSIONS}),
            or it is a known type but the supplied value was out of the
            allowable range for said type.
        """
        if angleType is not None and angleType not in self._RANGE_EXPRESSIONS:
            raise ValueError("Unknown angle type")

        if angle is not None and angleType is not None:
            rangeExpression = self._RANGE_EXPRESSIONS[angleType]
            if not rangeExpression(angle):
                template = "Angle {0} not in allowed range for type {1}"
                raise ValueError(template.format(angle, angleType))

        self.angleType = angleType
        self._angle = angle

        Initializes an angle.

        @param angle: The value of the angle in decimal degrees. (L{None} if
            unknown).
        @type angle: C{float} or L{None}

        @param angleType: A symbolic constant describing the angle type. Should
            be one of L{Angles} or {None} if unknown.

        @raises ValueError: If the angle type is not the default argument,
            but it is an unknown type (not in  C{Angle._RANGE_EXPRESSIONS}),
            or it is a known type but the supplied value was out of the
            allowable range for said type.
        
stackoverflow/venv/lib/python3.6/site-packages/twisted/positioning/base.py