try/catch X erro by Zero
Moderador: Moderadores
- juniorcamilo
- Usuário Nível 3

- Mensagens: 343
- Registrado em: 10 Nov 2006 09:12
- Localização: Pará
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
try/catch X erro by Zero
Olá!
Supondo que tenha se referido a "divide by zero", segue um exemplo:
Supondo que tenha se referido a "divide by zero", segue um exemplo:
Código: Selecionar todos
/* 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
//---------------------------------------------------------------------------------------- []´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
try/catch X erro by Zero
Coisa antiga do clipper, tá na minha errorsys.
Código: Selecionar todos
STATIC FUNCTION JoseQuintasError( e )
LOCAL nCont, cMessage, aOptions, nChoice
// by default, division by zero yields zero
IF ( e:GenCode == EG_ZERODIV )
RETURN ( 0 )
ENDIF
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
try/catch X erro by Zero
Olá!
Lembro-me deste código no Errorsys padrão. O Clipper optou por retornar zero? Acho que dá erro também. Não me lembro. É uma das possibilidades existentes, A maioria das linguagens retorna erro.
Divisão por zero
Lembro-me deste código no Errorsys padrão. O Clipper optou por retornar zero? Acho que dá erro também. Não me lembro. É uma das possibilidades existentes, A maioria das linguagens retorna erro.
Divisão por zero
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- juniorcamilo
- Usuário Nível 3

- Mensagens: 343
- Registrado em: 10 Nov 2006 09:12
- Localização: Pará
try/catch X erro by Zero
bom dia!!
entendi oq foi postado!!
então o exemplo do amigo alxsts não teria como retornar "0" e seguir o curso normal do prog. , ou seja, igual conseguimos fazer com o errorsys?
entendi oq foi postado!!
então o exemplo do amigo alxsts não teria como retornar "0" e seguir o curso normal do prog. , ou seja, igual conseguimos fazer com o errorsys?
Código: Selecionar todos
function ErrorSys()
Public cQual := "2"
ErrorBlock( {|e| DefError(e)} )
return
func DefError(e).............
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
try/catch X erro by Zero
Você sabe aonde dá erro?
Código: Selecionar todos
IF x == 0
resultado = 0
ELSE
resultado = numero / x
ENDIF
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- juniorcamilo
- Usuário Nível 3

- Mensagens: 343
- Registrado em: 10 Nov 2006 09:12
- Localização: Pará
try/catch X erro by Zero
sim sei!! mas como estou migrando o sistema clipper para harbour!! então provavelmente pode ocorrer em vários lugares(inviável sair procurando)!!JoséQuintas escreveu:Você sabe aonde dá erro?
Código: Selecionar todos
IF x == 0 resultado = 0 ELSE resultado = numero / x ENDIF
como o try é um recurso excelente achei q teria jeito de atribuir exceções para não parar a execução!!