你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
问题
话题
文章
帮助
登录
注册
Bug: 从模型导出的脚本不能运行
文章编号:
386
软件:
ArcInfo Desktop 9.0,ArcEditor 9.0,ArcView 9.0
操作系统:
N/A
1 个回复
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
要回复问题请先
登录
或
注册
发起人
EsriSupport
相关问题
两个图层投影坐标系都一样,但就是不能叠加在一起。怎么办,求大神指点。一个是县的灾害点,一个是县的行政区划。
sketchup模型导入cityengine中部分纹理丢失,怎么解决?
如何使用脚本或其他方法,将图层属性中属性域原值内容替换为属性域描述?
在模型构建器中实现计算几何
求ArcGISMXD批量导出图片工具?
使用portal10.5能直接发布三维模型服务吗
ArcGIS 10.2怎么从属性表选择导出.shp文件
CityEngine能否通过写脚本建模
SOE如何发布Arcgis的python脚本
运行webappbulider中的startup.bat出现错误
ARCGIS如何实现,按某字段属性值 批量分类导出成shp
问题状态
最新活动:
2015-11-22 23:02
浏览:
1401
关注:
2
人
1 个回复
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
要回复问题请先登录或注册