Bug: 从模型导出的脚本不能运行

文章编号: 386
软件: ArcInfo Desktop 9.0,ArcEditor 9.0,ArcView 9.0
操作系统: N/A
已邀请:

EsriSupport

赞同来自:

错误信息: 用户开发了一个基于复杂工作流的模型,并把它导出到脚本。在很多情况下从模型导出的脚本不能运行。

原因: 由ModelBuilder导出的脚本偶尔会因为名称和路径的问题引起脚本运行失败。已知
的情况如下:
A. 模型中的某个变量的名称是脚本语言的“保留字”。
B. 在查询或选择中的引号但导出成脚本时有语法错误。
C. 在模型中指定的输入数据的路径不是全路径。


解决方法: 上面已知情况相应的解决方法如下:
A. 变量名包含“保留字”
大多数脚本语言中有一些“保留字”作为基本的语法,不能够被编程人员用在变量名称。几乎在所有的语言中,类似for,while,if,then和else这些词都是保留字,但类似try和except只在个别的语言中被作为保留字,例如在python中。使用这些保留字时会引起脚本运行失败。在模型导出到脚本时,要避免使用这样的保留字作为变量名。另外,变量名可能有些其它的限制,比如在python中不允许变量名用数字开头。
在导出到脚本之前,请先了解脚本语言的保留字和变量命名规则,确保模型中的名称遵从这些规则。

B. 查询或选择中的引号
那些在模型中使用的要素类的一个子集的,当导出到脚本时,常常引起脚本运行失败。选择要素需要将查询语句或字符串包括在引号中。引号对于不同的应用有不同的意思,有ModelBuilder导出的查询不遵循脚本语言的规则。
用“select Layer by Attribute”工具后导出的python脚本为:
#process:Select Layer By Attribute...
gp.SelectLayerByAttribut_managerment(DownTown_Layer,"New_Selection",""POP" = 0", )
问题出在""POP" = 0"。ModelBuilder将查询条件包含在双引号中,因为查询条件必须是一个字符串。但是,不同的脚本语言对双引号的使用的不同的。对于python,这是两个字符串:一个空字符串(""),另一个" = 0"。POP在这就是一个没有定义的变量,这行因为这两个字符串和不认识的变量而返回语法错误。为了这个工具能正常运行,必须有带引号的字符串传给这个工具,但在不同的脚本语言中,处理的方法却是不同的。在python中,可以用转义字符告诉python:无论下一个是什么,都将被作为一个字符对待。这样""POP" = 0"就变成了""POP" = 0"。更简单的方法是在Python中用单引号包括字符串,这样查询语句变为'"POP"=0'。
在模型中使用了查询或选择,在导出的脚本中要检查字符串的有效性,必要情况下要改正它们。要了解选择的脚本语言是如何传递专门的字符并使用它们的。

C. 在模型中指定的输入图层的路径不是全路径
在ModelBuilder中可以直接从ArcMap的内容表中拖拽一个图层到ModelBuilder窗口中作为输入数据。这种情况下,在模型中创建一个输入数据变量,用蓝色的椭圆形符号显示并用图层名称命名。双击这个椭圆形,可以查看ArcMap是如何寻找这个数据的。数据源是ArcMap内容表中的图层的名称,这在ArcMap中是可以接受的,因为应用知道到哪里去寻找数据的完整路径,并把它正确地应用到空间处理工具中。然而,当导出成脚本后,用内容表中的图层名称"MyShapefile"命名的数据变量将转为下面的Python代码:
MyShapefiel = "MyShapefile"
当变量MyShapefile被用的空间处理工具中作为输入数据的路径时,因为在路径“MyShapefile”中找不到任何数据而导致工具运行失败。空间处理工具在脚本中使用时,工具要求精确地知道在哪儿能找到数据。
有几种方法来处理这种情况:
一个解决办法是在脚本中找到每一个数据变量,手工输入数据源的全路径名称。例如,在脚本中将
MyShapefiel = "MyShapefile"改为
MyShapefiel = "c:/data/project/MyShapefile.shp"
避免这样做的方法是在ModelBuilder中确认模型指到相应的数据。可以双击所有的输入数据源——蓝色的椭圆——将数据源设为硬盘上的数据路径。一旦知道硬盘上的某个路径,蓝色椭圆中的输入数据的名称将变成类似“MyShapefile.shp”。这样当导出的脚本中时,全路径将在脚本中显示,脚本将能正常运行。


创建时间:2004-08-31
最近更新:2004-08-31


原文链接
http://support.esrichina.com.cn/2004/0831/386.html

要回复问题请先登录注册