错误处理:跳过不存在的列表项

2024-09-27 09:33:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,它列出了SDE数据库中的要素类和字段。python模块arcplus创建一个要素类列表:

#Create list of feature classes on ArcSDE
mylist = arcplus.listAllFeatureClasses("Database Connections\\Connection to oracle.sde")    

而函数arcpy.ListFields为每个要素类创建字段列表。在

^{pr2}$

除非我对某个特定功能类的字段没有读取权限,否则这很有用。然后返回如下内容:

IOError: "Database Connections\Connection to oracle.sde\POLITICAL.LANDS\POLITICAL.DISTRICT_LANDS" does not exist

对于“IOError Some Feature Class does not exist”的每个实例,我想跳到我的\u列表中的下一个功能类。我还没有找到一个有效的try/except块。或者是完全不同的东西更合适?在


Tags: to功能列表plusconnectionconnectionsdatabaseoracle
1条回答
网友
1楼 · 发布于 2024-09-27 09:33:33

如果arcpy.ListFields(...)引发一个异常,它显然会扼杀整个列表/dict理解。你需要把它包装在一些能处理它的东西上,以返回你想要的东西。我想试试

def list_fields(list_entry):
    try:
        return arcpy.ListFields(list_entry)
    except IOError:
        return []

那么字典结构看起来像

^{pr2}$

请注意,为了节省内存和执行时间,我将您的列表理解更改为生成器表达式。如果您有python>;2.7,也可以使用dict comprehension,如下所示:

ns_dict = {
    list_entry: [f.name for f in list_fields(list_entry)]
        for list_entry in mylist)
)

相关问题 更多 >

    热门问题