在众多的编程语言中,开发程序都离不开Try Catch,UiPath中也有Try Catch。
程序框架中依靠Try Catch来保障程序在运行出错时,不仅可以获知运行错误,还能确保其他程序正常运行。
在今天的手把手教程系列,我们带你详细学习下Try Catch。
一 1
用法(下面有截图)
- 将开发好的流程放入Try Catch的Try中;
- 在Try Catch范围内,定义一个名为ProcessError的变量,类型是System.Exception;
- 然后,在Catches中定义一个名为exception异常变量(用于在出现异常时,获取异常信息),并通过Assign,将exception赋值给ProcessError;
- 最后,在Finally中放个if Activity,if Activity的Condition设置为:ProcessErroris nothing,then中放流程执行成功的操作,else中放执行失败时要做的操作。
下图是上面用法的Demo截图,图中用红色箭头标明了流程发生异常时,传递异常的路线:
二 1
总结
- 程序中不需要太多的Try Catch,一般一个足够,除非特殊用途;
- 使用Try Catch,需要对它完全理解后使用,否则,若只把它当成一个隐藏错误的方法,那可是对Try Catch的最大误解。
你误解Try Catch了吗?
如果需要详细学习Try Catch,可看下面的中文翻译(部分内容根据自己理解做了适当修改),并可到其英文网址(https://activities.uipath.com/docs/try-catch)下载写好的例程。
三 1
附:UiPath网站Try Catch中文翻译
Try Catch
全称:System.Activities.Statements.TryCatch
用途:捕获你设计的流程中的指定异常类型,并显示错误通知或将其解除并继续执行。
外观:
由三部分组成:
1.Try - 放编写的流程(该流程有可能发生你未写入流程逻辑的错误)。
2.Catches - 发生错误时要执行的Activity或Activity集。异常 - 要查找的异常类型。请注意,您可以添加多个类型的异常。
3.Finally- Try Catch块之后要执行的Activity或Activity集。只有在没有抛出异常或发生错误并且在Catch部分中捕获时,才会执行此部分。
注意:
如果Activities放在Try Catch的Try部分中,并且Continue On Error属性的值为True,则在执行项目时不会捕获任何错误;举例如下:
属性
DisplayName - Activity的显示名称。Private - 如果选中,则不再以Verbose级别记录变量和参数的值。
技巧:按快捷键“Ctrl + T”,将所选的activity置于Try Catch的Try部分内。
示例
为了更好地理解Try Catch的用法,我们创建了一个自动化程序,它从随机名称生成器网站收集多个名称并将它们写入Excel电子表格中。
点击UiPath英文网站的这里,可以下载初始工作流程。(运行会出程序异常)
Build DataTable 创建一个用于存储所收集名称的表。
调用另一个工作流来读取Web数据。
最后,Excel application scope用于在Excel文件中写入收集的信息。
首先,让我们运行自动化来检查是否有任何错误。
请注意,将显示“工作流异常”界面:
该异常类型字段告诉我们是什么问题,在Try Catch的Catches部分中,用作在工作流程执行期间查找的异常类型。
正如您在上面的屏幕截图中看到的,在运行示例工作流时,AttachBrowser容器选择器似乎存在问题。问题是选择器无法使用“生成随机名称 - 伪名称生成器”名称来标识浏览器窗口。
要捕获这个异常,需要进行以下操作:
1.从Activities面板中拖一个“Try Catch”到流程编辑区。
2.在Try Catch的Try部分中放一个Invoke(引用了一个文件叫readWebData.xaml)。Try会监视Invoke,当它出现异常时进行捕捉。
3.在“Catches”部分中,从下拉列表中选择UiPath.Core.SelectorNotFoundException。如果没有找到这个异常类型,点击“Browse and Select a .Net Type”,在弹出窗口中找到它。
4.可选操作。您可以在“Catches”部分中添加一个“Message Box”Activity,在Message Box的“内容”字段中填写引号之间的信息性消息,在我们的示例中“Internet Explorer”已关闭。
它现在将打开以继续工作流程执行。这意味着每当捕获到异常时,都会显示此消息框,以通知用户浏览器即将打开,以便成功执行工作流。
5.拖个“Element Exists”Activity到“Finally”部分中。
“ElementExists”Activity用于检查InternetExplorer是否打开了我们需要的网址https://www.fakenamegenerator.com。
6.打开Internet Explorer并访问前面提到的网址。
7.使用Indicate on screen功能选择Internet Explorer窗口。
8.选择“Element Exists”Activity并编辑其选择器,选择器内容是这样<wnd app='iexplore.exe' title='Generate a Random Name - Fake NameGenerator - Internet Explorer' />。
此选择器确保“Element Exists”Activity仅查找上述页面打开的InternetExplorer窗口。
9.在Output属性中,创建一个具有相关名称的变量,例如browser。这是一个布尔变量,可帮助您确定Internet Explorer是否在指示的页面上处于打开状态。
10.在“Element Exists”Activity下添加If Activity。如果Internet Explorer已关闭(通过browser的值来判断),则打开Internet Explorer,否则继续工作流。
11.在If Activity的Condition中,写入browser=false。此条件用于验证浏览器是否已打开,并根据其值执行其他操作。
12.在Then部分中拖入OpenBrowser Activity。如果满足条件(浏览器已关闭),则使用“Open Browser”Activity打开它,从而不影响工作流程。
13.在“Open Browser”的Url字段中键入https://www.fakenamegenerator.com。
14.Else部分留空,以便如果已在Internet Explorer打开指定的网站,则工作流按预期继续。
15. 运行工作流并注意以下其中一项:
- 如果Internet Explorer已关闭 - 将通知用户Internet Explorer即将打开,以便工作流程可以继续。浏览器打开,所有预期的数据都被收集并写入Excel文件。
- 如果Internet Explorer已打开 - 工作流程按预期执行。
文章来源:“柴班说”微信公众号 作者:柴娟伟