r"""
        Raise exception conditionally.

        :param condition: Flag that indicates whether the exception is
                          raised *(True)* or not *(False)*
        :type  condition: boolean

        :param edata: Replacement values for fields in the exception message
                      (see :py:meth:`pexdoc.ExHandle.add_exception` for how
                      to define fields). Each dictionary entry can only have
                      these two keys:

                      * **field** *(string)* -- Field name

                      * **value** *(any)* -- Field value, to be converted into
                        a string with the `format
                        <https://docs.python.org/2/library/stdtypes.html#
                        str.format>`_ string method

                      If None no field replacement is done
        :type  edata: dictionary, iterable of dictionaries or None

        :raises:
         * RuntimeError (Argument \\`condition\\` is not valid)

         * RuntimeError (Argument \\`edata\\` is not valid)

         * RuntimeError (Argument \\`exname\\` is not valid)

         * RuntimeError (Field *[field_name]* not in exception message)

         * ValueError (Exception name *[name]* not found')

def craise(self, condition, edata=None):
        r"""
        Raise exception conditionally.

        :param condition: Flag that indicates whether the exception is
                          raised *(True)* or not *(False)*
        :type  condition: boolean

        :param edata: Replacement values for fields in the exception message
                      (see :py:meth:`pexdoc.ExHandle.add_exception` for how
                      to define fields). Each dictionary entry can only have
                      these two keys:

                      * **field** *(string)* -- Field name

                      * **value** *(any)* -- Field value, to be converted into
                        a string with the `format
                        <https://docs.python.org/2/library/stdtypes.html#
                        str.format>`_ string method

                      If None no field replacement is done
        :type  edata: dictionary, iterable of dictionaries or None

        :raises:
         * RuntimeError (Argument \\`condition\\` is not valid)

         * RuntimeError (Argument \\`edata\\` is not valid)

         * RuntimeError (Argument \\`exname\\` is not valid)

         * RuntimeError (Field *[field_name]* not in exception message)

         * ValueError (Exception name *[name]* not found')

        """
        self._exh.raise_exception_if(
            self._exname, condition, edata, _keys=self._ex_data
        )