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: 3118
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
- Curtiram: 1 vez
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: 20453
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 3118
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
- Curtiram: 1 vez
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: 20453
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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!!