boa tarde
utilizando try catch, como tratar o erro by zero?

Moderador: Moderadores
/* TRY / CATCH / FINALLY / END */
#xcommand TRY => BEGIN SEQUENCE WITH __BreakBlock()
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
#xcommand FINALLY => ALWAYS
#include "inkey.ch"
Procedure Main
LOCAL x, y, oErr, GetList := {}
EXTERNAL HB_LANG_PT
EXTERNAL HB_CODEPAGE_PTISO
HB_LangSelect( "PT" )
hb_cdpSelect( "PTISO" )
SetMode(25,80)
CLS
While LastKey() != K_ESC
Try
x := 0
y := 0
@10, 10 Say "Entre valor 1:" Get x Pict "9999"
@11, 10 Say "Entre valor 2:" Get y Pict "9999"
READ
If LastKey() != K_ESC
@13, 10 Say "Valor 1 / valor 2:" + Str(x/y)
Endif
Catch oErr
// tratamento genérico
ErrShow( oErr )
// tratamento de um erro especÃfico
If oErr:subsystem == "BASE" .AND. oErr:subcode = 1340
hb_Alert( { "Ocorreu um Erro.", "", "Divisão por zero", "", ;
"Descrição: " + LTrim(Str(oErr:genCode)) + " " + oErr:description } )
Endif
// criando seu próprio objeto erro...
oErr := ErrorNew()
oErr:Args := {}
oErr:CanDefault := .F.
oErr:CanRetry := .F.
oErr:CanSubstitute := .T.
oErr:Description := "erro criado agora"
oErr:GenCode := 99999
oErr:Operation := '?'
oErr:Severity := 2
oErr:SubCode := 9999
oErr:SubSystem := "DUMMY"
Try
// disparando seu próprio objeto erro...
BREAK (oErr)
Catch
ErrShow( oErr )
End Try
End Try
Enddo
RETURN
//----------------------------------------------------------------------------------------
STATIC PROCEDURE ErrShow( oErr )
hb_Alert( { "Ocorreu um Erro.", "", ;
"Erro: " + oErr:subsystem + "/" + LTrim(Str(oErr:subcode)), ;
"Descrição: " + LTrim(Str(oErr:genCode)) + " " + oErr:description, ;
"Operação: " + oErr:operation ;
} ;
)
RETURN
//----------------------------------------------------------------------------------------
STATIC FUNCTION JoseQuintasError( e )
LOCAL nCont, cMessage, aOptions, nChoice
// by default, division by zero yields zero
IF ( e:GenCode == EG_ZERODIV )
RETURN ( 0 )
ENDIF
function ErrorSys()
Public cQual := "2"
ErrorBlock( {|e| DefError(e)} )
return
func DefError(e).............
IF x == 0
resultado = 0
ELSE
resultado = numero / x
ENDIF
JoséQuintas escreveu:Você sabe aonde dá erro?IF x == 0
resultado = 0
ELSE
resultado = numero / x
ENDIF
Usuários vendo este fórum: Nenhum usuário registrado online e 8 visitantes