Moderators JLogan3o13 Posted November 21, 2016 Moderators Share Posted November 21, 2016 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. mLipok 1 "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 More sharing options...
FrancescoDiMuro Posted November 21, 2016 Author Share Posted November 21, 2016 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 )... 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: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
FrancescoDiMuro Posted November 21, 2016 Author Share Posted November 21, 2016 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: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
mLipok Posted November 21, 2016 Share Posted November 21, 2016 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 Code * for 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 API * ErrorLog.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 TaskScheduler * IE 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 stuff * OnHungApp handler * Avoid "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" , 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 More sharing options...
FrancescoDiMuro Posted November 21, 2016 Author Share Posted November 21, 2016 1 minute ago, mLipok said: Your program. Your choice. AutoIt gives you ample opportunities in this regard. Everything depends on the needs and workload. Some example, please? Thank you You're teaching me a lot! Click here to see my signature: Spoiler ALWAYS GOOD TO READ: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
Moderators JLogan3o13 Posted November 21, 2016 Moderators Share Posted November 21, 2016 Look at FileWrite, FileWriteLine and _FileWriteLog in the help file. "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 More sharing options...
FrancescoDiMuro Posted November 21, 2016 Author Share Posted November 21, 2016 Just now, JLogan3o13 said: Look at FileWrite, FileWriteLine and _FileWriteLog in the help file. Thanks JLogan! Have a wonderful day Thanks everyone for the help guys! Click here to see my signature: Spoiler ALWAYS GOOD TO READ: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
mLipok Posted November 21, 2016 Share Posted November 21, 2016 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 Code * for 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 API * ErrorLog.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 TaskScheduler * IE 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 stuff * OnHungApp handler * Avoid "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" , 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 More sharing options...
mikell Posted November 21, 2016 Share Posted November 21, 2016 38 minutes ago, mLipok said: But this is only my feeling 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 Link to comment Share on other sites More sharing options...
FrancescoDiMuro Posted November 21, 2016 Author Share Posted November 21, 2016 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: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
FrancescoDiMuro Posted November 21, 2016 Author Share Posted November 21, 2016 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? Click here to see my signature: Spoiler ALWAYS GOOD TO READ: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
mLipok Posted November 21, 2016 Share Posted November 21, 2016 (edited) 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 November 21, 2016 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 Code * for 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 API * ErrorLog.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 TaskScheduler * IE 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 stuff * OnHungApp handler * Avoid "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" , 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 More sharing options...
Moderators JLogan3o13 Posted November 21, 2016 Moderators Share Posted November 21, 2016 (edited) @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 November 21, 2016 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 More sharing options...
FrancescoDiMuro Posted November 21, 2016 Author Share Posted November 21, 2016 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: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
FrancescoDiMuro Posted November 21, 2016 Author Share Posted November 21, 2016 (edited) 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! Edited November 21, 2016 by FrancescoDiMuro Click here to see my signature: Spoiler ALWAYS GOOD TO READ: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now