ListFields不适用于企业SDE中的特性类

771
4
跳到解决方案
05-11-2021 12:25 PM
EvanMyers1
通过
新贡献者III

我遇到了一个奇怪的问题,我正在处理的代码,它只发生在我处理这样格式化的数据时。这来自一个使用多值参数的脚本。见下文:

fc = "'数据库连接\\Prod@GISdb.OSA.sde\\Prod.Water\\Prod.ControlValve';'数据库连接\\Prod@GISdb.OSA.sde\\Prod.Water\\Prod.wFitting';'数据库连接\\Prod@GISdb.OSA.sde\\Prod.Water\\Prod.wHydrant'" fclist = fc.split(";") for each in fclist: fieldnames = [f.name for f in arcpy.ListFields(each)]打印字段名

由此我得到了错误:

运行时错误
回溯(最近一次调用):
文件"",第2行,在<模块>
文件“c:\program files (x86)\arcgis\desktop10.7\arcpy\arcpy\__init__.py”,第1139行,在ListFields中
返回的全科医生。listFields(dataset, wild_card, field_type)
文件“c:\program files (x86)\arcgis\desktop10.7\arcpy\arcpy\geoprocessing\_base.py”,第346行,在listFields中
self._gp。ListFields (* gp_fixargs (args,真)))
IOError:“'Database Connections\Prod@GISdb.OSA.sde\Prod.Water\Prod.ControlValve'”不存在

我对这个错误感到不知所措,因为它经常出现。如果有人有任何意见如何避免这种错误,我将非常感激!

标签(4)
0荣誉
1解决方案

接受的解决方案
EvanMyers1
通过
新贡献者III

结果是每个文件路径周围的单引号(')给了我问题。从没想过这些能预防arcpy。描述和arcpy。ListFields工作: dizzy_face:

在原帖子中查看解决方案

0荣誉
4回复
PhilLarkin1
通过
定期撰稿人

您可以使用arcpy.describe和.exists来验证连接文件是否有效。

0荣誉
DavidPike
通过 常规赛MVP
常规赛MVP

也许是字符串的原始格式

fc = "r' database Connections\\Prod@GISdb.OSA.sde\\Prod.Water\\Prod.ControlValve';r' database Connections\\Prod@GISdb.OSA.sde\\Prod.Water\\Prod.wFitting' "; r' database Connections\\Prod@GISdb.OSA.sde\\Prod.Water\\Prod.wHydrant'" fclist = fc.split(";") for each in fclist: print (each) fieldnames = [f.name for f in arcpy.ListFields(each)] print fieldnames
0荣誉
DanPatterson
通过 尊敬的贡献者
尊敬的贡献者

除了不使用包含空格和标点符号的路径(这可能导致不一致的问题)。

设置你的作品空间,解析完特征类/特征/表名后,最后检查一下它是否“存在”

Arcpy.env.workspace = "c:/your_path/your. "gdb" # ------ does it exists if arcpy.Exists("your_fc")

...有点退休了…
0荣誉
EvanMyers1
通过
新贡献者III

结果是每个文件路径周围的单引号(')给了我问题。从没想过这些能预防arcpy。描述和arcpy。ListFields工作: dizzy_face:

0荣誉