Err.clear в VBScript - PullRequest
       18

Err.clear в VBScript

0 голосов
/ 09 ноября 2010

в этом VBScript второй Err.Clear требуется или нет как часть оптимизации.

   Set WshShell = CreateObject("WScript.Shell")
   strSpoRootKey = "HKLM\SOFTWARE\"
   strKey = RootKey & "tcc\Operation\" & Version & "\Location"
   strPath = wshShell.RegRead(strKey)
   If Err Then
      Err.Clear  //first Err.clear
       RootKey = "HKLM\SOFTWARE\Wow6432Node"
       strKey = RootKey & "tcc\Operation\" & Version & "\Location"
       strPath = wshShell.RegRead(strKey)
       If Err Then
           Err.Clear   // second Err.clear
           strErr = strErr & ": " & Version & ": " & strKey & ":error("  
       End If
   End If

Должны ли мы удалить второй Err.Clear из кода

Ответы [ 2 ]

3 голосов
/ 09 ноября 2010

Цель вызова Err.Clear, чтобы явно очистить объект Err после того, как вы перехватили и обработали ошибку. MSDN предполагает, что это особенно полезно, когда вы используете отложенную обработку ошибок с On Error Resume Next.Это говорит о том, что вам действительно следует звонить Err.Clear после того, как вы обработали обнаруженную ошибку, что бы это ни значило для вашего конкретного приложения.

Вы не предоставили достаточно своихкод, предлагающий тип используемых вами процедур обработки ошибок.Например, если у вас есть On Error Resume Next в вашем коде над тем блоком, который вы опубликовали, и / или что вы делаете с strErr для фактической обработки ошибки.Ваш сценарий заканчивается в конце опубликованного раздела?Если это так, вы, вероятно, в чистом виде удаляете вторую Err.Clear, так как в любом случае во время выполнения скрипта будет невозможно вызвать другую ошибку.

В любом случае, я собираюсь принятьпростой способ и предложить вам сделать то же самое: нет абсолютно никакой причины "оптимизировать" этот код, удаляя любые операторы Err.Clear. Я обещаю, что оператор не является узким местом для скорости выполнения вашего скрипта,Если у вас не возникли проблемы с процедурами обработки ошибок (например, перехват одной и той же ошибки дважды или невозможность перехвата ошибки из-за преждевременной очистки), нет особых причин для беспокойства по поводу «дополнительных» операторов Err.Clear.

0 голосов
/ 10 ноября 2010

да, второй Err.Clear должен быть понижен после ошибки обрабатываются правильно, в противном случае переносится на следующий этап

так что все изменится на

If Err Then           
       strErr = strErr & ": " & Version & ": " & strKey & ":error("  
       Err.Clear   // second Err.clear
End If
...