<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def request_withdrawal(self, amount: Number, address: str, subtract_fee: bool=False, **params) -> Withdrawal: """Request a withdrawal."""

        self.log.debug(f'Requesting {self.currency} withdrawal from {self.name} to {address}')
        amount = self._parse_money(amount)

        if self.dry_run:
            withdrawal = Withdrawal.create_default(TxType.WITHDRAWAL, self.currency, amount, address)
            self.log.warning(f'DRY RUN: Withdrawal requested on {self.name}: {withdrawal}')
            return withdrawal

        try:
            withdrawal = self._withdraw(amount, address, subtract_fee, **params)
        except Exception as e:
            msg = f'Failed requesting withdrawal on {self.name}!: amount={amount}, address={address}'
            raise self.exception(InvalidWithdrawal, msg, e) from e

        self.log.info(f'Withdrawal requested on {self.name}: {withdrawal}')
        return withdrawal