Jump to content

I would like to learn...


Recommended Posts

  • Moderators

Think of snowball being a small error, perhaps not even enough to crash your script. But if you don't catch it, it affects your next command. That in turn errors out, which affects the next, etc., until an error is of such a degree to halt the processing of the script altogether. Then you have to start at the error that killed your script and work your way backward to find the culprit, whereas if you catch all your errors, you will know right away when something does not process as you intended.

"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

How to get your question answered on this forum!

Link to comment
Share on other sites

1 minute ago, mLipok said:

Personally, I prefer the reverse order.
First, check if something is wrong, and finally do what you need.

I mean:

If @error Then   ; there was a problem, @error <> 0
      CallRescueDepartment
Else    ; means no problem, @error = 0
      DoWhatShouldBeDone
EndIf

 

This is particularly useful when creating functions for the UDF, then do not forget about this code to work flawlessly.
But this is only my feeling ;)

 

Ah yeah! That looks great! Another question ( that I just did 2 times :P )... About errors' log... You should do a .txt file ( i.e. ) that records every error the program encountered or ...? Thank you buddy :) Really really helpful! 

Click here to see my signature:

Spoiler

ALWAYS GOOD TO READ:

 

Link to comment
Share on other sites

13 minutes ago, JLogan3o13 said:

Think of snowball being a small error, perhaps not even enough to crash your script. But if you don't catch it, it affects your next command. That in turn errors out, which affects the next, etc., until an error is of such a degree to halt the processing of the script altogether. Then you have to start at the error that killed your script and work your way backward to find the culprit, whereas if you catch all your errors, you will know right away when something does not process as you intended.

Thanks for the explanation buddy :) Have a good day :) 

Click here to see my signature:

Spoiler

ALWAYS GOOD TO READ:

 

Link to comment
Share on other sites

12 minutes ago, FrancescoDiMuro said:

About errors' log... You should do a .txt file ( i.e. ) that records every error the program encountered or ...?

Your program. Your choice. AutoIt gives you ample opportunities in this regard. Everything depends on the needs and workload.

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST APIErrorLog.au3 UDF - A logging Library * Include Dependency Tree (Tool for analyzing script relations) * Show_Macro_Values.au3 *

 

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

OpenOffice/LibreOffice/XLS Related: WriterDemo.au3 * XLS/MDB from scratch with ADOX

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskSchedulerIE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) * PDF Related:How to get reference to PDF object embeded in IE * IE on Windows 11

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

I also encourage you to check awesome @trancexx code:  * Create COM objects from modules without any demand on user to register anything. * Another COM object registering stuffOnHungApp handlerAvoid "AutoIt Error" message box in unknown errors  * HTML editor

winhttp.au3 related : * https://www.autoitscript.com/forum/topic/206771-winhttpau3-download-problem-youre-speaking-plain-http-to-an-ssl-enabled-server-port/

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2023-04-24

Link to comment
Share on other sites

You can use ConsoleWrite, MsgBox, FileWriteLine, _DebugOut, _EventLog__Report, SQLite, ADO.au3 UDF, Notify UDF .....

As I said before:

_Example()
Func _Example()
    ........
    _SOME_FUNCTION()
    If @error Then 
        ConsoleWrite('! ---> @error=' & @error & '  @extended=' & @extended & ' : MY DESCRIPION' & @CRLF)
        Return .....
    EndIf
    ........
EndFunc

or some more advance:

_Example()
    Func _Example()
        ........
        Local $vResult = _SOME_FUNCTION()
        _My_ErrExt('Bug after calling _SOME_FUNCTION()', $vResult)
        If @error then Return SetError(@error, @extended, $vResult)
        ........
    EndFunc

    Func _My_ErrExt($sDescription, $vReturnValue = '', $iError = @error, $iExtended = @extended)
        If $iError Then
            ConsoleWrite('! CATCH: ' & $sDescription & ' [ ' & $iError & ' / ' & $iExtended & ' ]')
        EndIf
        Return SetError($iError, $iExtended, $vReturnValue)
    EndFunc   ;==>_Diagnostic_Out_ErrExt

Using _My_ErrExt() you can at any time change your Error Reporting system.
As you can also notice function _My_ErrExt()  is transparent for @error and @extended

 

and if you are trying to bo complex , in case when you start using COM object you should also use COM Error Handler >> Read about ObjEvent()

 

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST APIErrorLog.au3 UDF - A logging Library * Include Dependency Tree (Tool for analyzing script relations) * Show_Macro_Values.au3 *

 

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

OpenOffice/LibreOffice/XLS Related: WriterDemo.au3 * XLS/MDB from scratch with ADOX

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskSchedulerIE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) * PDF Related:How to get reference to PDF object embeded in IE * IE on Windows 11

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

I also encourage you to check awesome @trancexx code:  * Create COM objects from modules without any demand on user to register anything. * Another COM object registering stuffOnHungApp handlerAvoid "AutoIt Error" message box in unknown errors  * HTML editor

winhttp.au3 related : * https://www.autoitscript.com/forum/topic/206771-winhttpau3-download-problem-youre-speaking-plain-http-to-an-ssl-enabled-server-port/

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2023-04-24

Link to comment
Share on other sites

1 minute ago, mLipok said:

You can use ConsoleWrite, MsgBox, FileWriteLine, _DebugOut, _EventLog__Report, SQLite, ADO.au3 UDF, Notify UDF .....

As I said before:

_Example()
Func _Example()
    ........
    _SOME_FUNCTION()
    If @error Then 
        ConsoleWrite('! ---> @error=' & @error & '  @extended=' & @extended & ' : MY DESCRIPION' & @CRLF)
        Return .....
    EndIf
    ........
EndFunc

or some more advance:

_Example()
    Func _Example()
        ........
        Local $vResult = _SOME_FUNCTION()
        _My_ErrExt('Bug after calling _SOME_FUNCTION()', $vResult)
        If @error then Return SetError(@error, @extended, $vResult)
        ........
    EndFunc

    Func _My_ErrExt($sDescription, $vReturnValue = '', $iError = @error, $iExtended = @extended)
        If $iError Then
            ConsoleWrite('! CATCH: ' & $sDescription & ' [ ' & $iError & ' / ' & $iExtended & ' ]')
        EndIf
        Return SetError($iError, $iExtended, $vReturnValue)
    EndFunc   ;==>_Diagnostic_Out_ErrExt

Using _My_ErrExt() you can at any time change your Error Reporting system.
As you can also notice function _My_ErrExt()  is transparent for @error and @extended

 

and if you are trying to bo complex , in case when you start using COM object you should also use COM Error Handler >> Read about ObjEvent()

 

Yeah, I like to be very meticulous... So, just for recapitulate... Everytime I use a function, I should do the error check... EVERYTIME. Ok... So... 
I think would be nice make a log with a .txt file and write in it everytime an error occurs... Or is more efficient use what you just described? COM? Thanks :)

Click here to see my signature:

Spoiler

ALWAYS GOOD TO READ:

 

Link to comment
Share on other sites

2 minutes ago, mikell said:

And it's a right one, because the Else part is usually implicit  :)

If @error Then   ; there was a problem, @error <> 0
      CallRescueDepartment
EndIf

; means no problem, @error = 0
DoWhatShouldBeDone

 

Yeah, you're right! But if you want to check the specified value, you can't omit the ElseIf clause... Am I right? :D 

Click here to see my signature:

Spoiler

ALWAYS GOOD TO READ:

 

Link to comment
Share on other sites

15 minutes ago, FrancescoDiMuro said:

I think would be nice make a log with a .txt file and write in it everytime an error occurs... Or is more efficient use what you just described?

you can combine this two concept together:

Func _My_ErrExt($sDescription, $vReturnValue = '', $iError = @error, $iExtended = @extended)
    If $iError Then
        _FileWriteLog(@ScriptDir & '\Error.log', '! CATCH: ' & $sDescription & ' [ ' & $iError & ' / ' & $iExtended & ' ]')
    EndIf
    Return SetError($iError, $iExtended, $vReturnValue)
EndFunc   ;==>_Diagnostic_Out_ErrExt

But you must remeber , in some cases when @error occurs you should end processing data, in some other just change a way of processing, but I can not imagine the situation when you should ignore them .... maybe one - wrong (inconsistently) written function.

And because of this I used:

If @error then Return SetError(@error, @extended, $vResult)

 

EDIT: 
The imagination sometimes plays tricks. I just remeber to myself, that in some solution I'm specialy ignore @error as I know that some function will give me a proper result, in some short time. So igonoring @error can be a way to check if something Finally happend.

 

Edited by mLipok

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST APIErrorLog.au3 UDF - A logging Library * Include Dependency Tree (Tool for analyzing script relations) * Show_Macro_Values.au3 *

 

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

OpenOffice/LibreOffice/XLS Related: WriterDemo.au3 * XLS/MDB from scratch with ADOX

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskSchedulerIE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) * PDF Related:How to get reference to PDF object embeded in IE * IE on Windows 11

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

I also encourage you to check awesome @trancexx code:  * Create COM objects from modules without any demand on user to register anything. * Another COM object registering stuffOnHungApp handlerAvoid "AutoIt Error" message box in unknown errors  * HTML editor

winhttp.au3 related : * https://www.autoitscript.com/forum/topic/206771-winhttpau3-download-problem-youre-speaking-plain-http-to-an-ssl-enabled-server-port/

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2023-04-24

Link to comment
Share on other sites

  • Moderators

@FrancescoDiMuro I realize we are throwing a lot at you, but it is the nature of AutoIt; there are many ways to accomplish the same thing. To answer your question about the ElseIf, If I am writing something where I need to change processing based on the exact nature of the error (rather than just if there is an error), I usually use a Switch statement:

#include <Array.au3>
#include <MsgBoxConstants.au3>

Local $aArray = FileReadToArray(@DesktopDir & "\test.txt")
    Switch @error
        Case 1
            MsgBox($MB_OK, "Example", "@error is " & @error & ", can't open file")
        Case 2
            MsgBox($MB_OK, "Example", "@error is " & @error & ", file is empty")
        Case Else
            _ArrayDisplay($aArray)
    EndSwitch

It boils down to being situational, you will have to decide based on your code how deep with the error handling you need to go.

Edited by JLogan3o13

"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

How to get your question answered on this forum!

Link to comment
Share on other sites

3 minutes ago, mLipok said:

you can combine this two concept together:

Func _My_ErrExt($sDescription, $vReturnValue = '', $iError = @error, $iExtended = @extended)
    If $iError Then
        _FileWriteLog(@ScriptDir & '\Error.log', '! CATCH: ' & $sDescription & ' [ ' & $iError & ' / ' & $iExtended & ' ]')
    EndIf
    Return SetError($iError, $iExtended, $vReturnValue)
EndFunc   ;==>_Diagnostic_Out_ErrExt

But you must remeber , in some cases when @error occurs you should end processing data, in some other just change a way of processing, I can not imagine the situation whe you should ignore them .... maybe one - wrong (inconsistently) written function.

And because of this I used:

If @error then Return SetError(@error, @extended, $vResult)

 

Thanks for the reply! :) So... Here you have done a function, and you call this function everytime you call another function? :) Thanks! 

Click here to see my signature:

Spoiler

ALWAYS GOOD TO READ:

 

Link to comment
Share on other sites

3 minutes ago, JLogan3o13 said:

@FrancescoDiMuro I realize we are throwing a lot at you, but it is the nature of AutoIt; there are many ways to accomplish the same thing. To answer your question about the ElseIf, If I am writing something where I need to change processing based on the exact nature of the error (rather than just if there is an error), I usually use a Switch statement:

#include <Array.au3>
#include <MsgBoxConstants.au3>

Local $aArray = FileReadToArray(@DesktopDir & "\test.txt")
    Switch @error
        Case 1
            MsgBox($MB_OK, "Example", "@error is " & @error & ", can't open file")
        Case 2
            MsgBox($MB_OK, "Example", "@error is " & @error & ", file is empty")
        Case Else
            _ArrayDisplay($aArray)
    EndSwitch

It boils down to being situational, you will have to decide based on your code how deep with the error handling you need to go.

Ahahahahah yeah buddy! I feel "What the heck is all these stuffs?", but I'm curious, and I like to learn these things... So, throw 'em at me! Don't feel too much master! I knew the Switch...Case since I was using C++... So, thank you :) 

PS: Now I'm coming home, so, see you tomorrow guys! Have a wonderful night and, enjoy! Goodbye Sirs! :D 

Edited by FrancescoDiMuro

Click here to see my signature:

Spoiler

ALWAYS GOOD TO READ:

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...