import arcpy

in_features = "c:/base/transport.gdb/roads"

try:
# Note: CopyFeatures will always fail if the input and output are
# the same feature class
arcpy.CopyFeatures_management(in_features, in_features) except arcpy.ExecuteError:
print arcpy.GetMessages()
==================
import arcpy try:
# If a tool produces a warning, it will throw an exception
arcpy.SetSeverityLevel(1) # Note: DeleteFeatures on a feature class will always return a warning
arcpy.DeleteFeatures_management("c:/base/transport.gdb/roads") except arcpy.ExecuteWarning:
print arcpy.GetMessages()

  

try-except 语句
try-except 语句可用于封装整个程序,或者只封装要捕捉和标识错误的特定代码段。如果 try 语句中发生错误,则会引发异常,然后会执行 except 语句下的代码。使用简单的 except 语句是最基本的错误处理方式。 在以下代码中,由于未使用所需的“距离”参数,导致缓冲执行失败。为了在失败之后显示说明性的提示,使用了 except 语句来捕捉错误,然后获取并打印缓冲生成的错误消息。请注意,只有在缓冲返回错误后才会执行 except 代码块。 import arcpy try:
# Execute the Buffer tool
#
arcpy.Buffer_analysis("c:/transport/roads.shp", "c:/transport/roads_buffer.shp")
except Exception as e:
print e.message # If using this code within a script tool, AddError can be used to return messages
# back to a script tool. If not, AddError will have no effect.
arcpy.AddError(e.message) try 语句有一个可选的 finally 子句,可用于无论是否出现异常都始终应该执行的任务。下例中,ArcGIS 3D Analyst 扩展模块通过 finally 子句检入,从而确保始终会检回该扩展模块。 class LicenseError(Exception):
pass import arcpy
from arcpy import env try:
if arcpy.CheckExtension("3D") == "Available":
arcpy.CheckOutExtension("3D")
else:
# Raise a custom exception
#
raise LicenseError env.workspace = "D:/GrosMorne"
arcpy.HillShade_3d("WesternBrook", "westbrook_hill", 300)
arcpy.Aspect_3d("WesternBrook", "westbrook_aspect") except LicenseError:
print "3D Analyst license is unavailable"
except:
print arcpy.GetMessages(2)
finally:
# Check in the 3D Analyst extension
#
arcpy.CheckInExtension("3D") raise 语句
上一个示例介绍了如何处理代码中发生的异常;在某些情况下,可能需要创建自定义的异常。此时可使用 raise 语句。在以下代码中,在识别出输入要素类未包含任何要素后使用了 raise 语句。从严格意义上来说,这并不属于错误,而只是使用代码来预防的一种情况。 class NoFeatures(Exception):
pass import arcpy
import os arcpy.env.overwriteOutput = 1
fc = arcpy.GetParameterAsText(0) try:
# Check that the input has features
#
result = arcpy.GetCount_management(fc)
if int(result.getOutput(0)) > 0:
arcpy.FeatureToPolygon_management(fc, os.path.dirname(fc) + os.sep + "out_poly.shp")
else:
# Raise custom exception
#
raise NoFeatures(result) except NoFeatures:
# The input has no features
#
print fc + " has no features."
except:
# By default any other errors will be caught here
#
print arcpy.GetMessages(2) ExecuteError 类
地理处理工具失败时会抛出 ExecuteError 异常类。这说明您可以将错误分成两组,即将地理处理错误(抛出 ExecuteError 异常的错误)归为一组,而将所有其他错误归为一组。然后,可分别采用不同的方式处理这些错误,如下面的代码中所示: import arcpy try:
result = arcpy.GetCount_management("C:/invalid.shp") # Return geoprocessing specific errors
#
except arcpy.ExecuteError:
arcpy.AddError(arcpy.GetMessages(2)) # Return any other type of error
except:
arcpy.AddError("Non-tool error occurred") traceback
在较大较复杂的脚本中,可能很难确定错误的确切位置。可以将 Python 的 sys 和 traceback 模块结合使用来找出错误的准确位置和原因,这种方法可以较为准确地标识出错误的原因并节省您宝贵的调试时间。 # Import the required modules
#
import arcpy
import sys
import traceback arcpy.env.workspace = "C:/Data/myData.gdb"
try:
arcpy.CreateSpatialReference_management()
#--------------------------
# Your code goes here
#
# See the table below for examples
#--------------------------
except arcpy.ExecuteError:
# Get the tool error messages
#
msgs = arcpy.GetMessages(2) # Return tool error messages for use with a script tool
#
arcpy.AddError(msgs) # Print tool error messages for use in Python/PythonWin
#
print msgs except:
# Get the traceback object
#
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0] # Concatenate information together concerning the error into a message string
#
pymsg = "PYTHON ERRORS:\nTraceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
msgs = "ArcPy ERRORS:\n" + arcpy.GetMessages(2) + "\n" # Return python error messages for use in script tool or Python Window
#
arcpy.AddError(pymsg)
arcpy.AddError(msgs) # Print Python error messages for use in Python / Python Window
#
print pymsg + "\n"
print msgs 如果使用了上述代码并且地理处理工具发生了错误(如输入无效),则会引发 ExecuteError,并会使用第一个 except 语句。此语句将使用 GetMessages 函数打印出错误消息。如果使用相同的代码但发生的错误类型不同,则会使用第二个 except 语句。该语句将获取 traceback 对象并打印出相应的系统错误消息,而不是打印地理处理消息。 下面列出了可替换到上述代码中的三条不同的代码行预计会产生的错误。第一个示例产生了地理处理工具错误,会打印出 traceback 信息和地理处理错误消息。第二个和第三个示例与地理处理并不相关,只会打印 traceback 信息。 代码
产生的错误 arcpy.GetCount_management("") PYTHON ERRORS:
Traceback info:
File "c:\temp\errortest.py", line 10, in <module>
arcpy.GetCount_management("") Error Info:
Failed to execute. Parameters are not valid.
ERROR 000735: Input Rows: value is required
Failed to execute (GetCount). ArcPy ERRORS:
Failed to execute. Parameters are not valid.
ERROR 000735: Input Rows: value is required
Failed to execute (GetCount). x = "a" + 1 PYTHON ERRORS:
Traceback info:
File "c:\temp\errortest.py", line 10, in <module> x = "a" + 1 Error Info:
cannot concatenate 'str' and 'int' objects float("a text string") PYTHON ERRORS:
Traceback info:
File "c:\temp\errortest.py", line 10, in <module> float("a text string")
Error Info:
invalid literal for float(): a text string 错误结果
从结果对象获取错误消息
有关结果对象的快速表达如下所示: result = arcpy.GetCount_management("c:/data/rivers.shp") 如果调用 GetCount 引发了异常,则结果对象为空。这表示无法从结果对象中检索错误消息。 import arcpy
try:
result = arcpy.GetCount_management("c:/data/rivers.shp") # Return GEOPROCESSING specific errors
# (this method is INCORRECT!)
except:
arcpy.AddError(result.getMessages(2)) 上述代码失败,并显示消息“未定义名称‘result’”。这是由于结果对象因工具失败而无法进行创建。因为未创建结果对象,因此会在尝试使用 getMessages 方法时引发 Python 错误。 注注:即使在工具失败的情况下,也会创建通过调用 ArcGIS for Server 上的地理处理服务所创建的结果对象。仅当工具在本地运行且引发错误时,创建结果对象才会失败。有关使用结果对象的详细信息,请参阅从地理处理工具获取结果。

arcgis python 异常处理的更多相关文章

  1. arcgis python 异常处理和信息处理

    #coding=utf8 import arcpy import os import sys import ylpy try: a=1111111 b=0000 c=a/b except Except ...

  2. ArcGIS Python人门到精通目录基于ArcGIS10.2,100以上案例15章42个视频806分钟,51GIS网站上线

    ArcGIS Python人门到精通目录 闫老师 QQ:276529800 微信13108507190 1.  ArcGIS Python基础 1.1  ArcGIS为什么学习Python 1.2 A ...

  3. python异常处理(基础)

    之前在学习python的时候有整理过python异常处理的文章,不够简单也不够完整,所以决定再整理一篇,算做补充. http://www.cnblogs.com/fnng/archive/2013/0 ...

  4. Python异常处理 分类: python Raspberry Pi 服务器搭建 2015-04-01 13:22 172人阅读 评论(0) 收藏

    一个程序要保持稳定运行必须要有异常处理,本文将简单介绍Python中的try-except..异常处理语句的使用. 该种异常处理语法的规则是: 执行try下的语句,如果引发异常,则执行过程会跳到第一个 ...

  5. Python 异常处理--raise函数用法

    raise语句手工引发一个异常: "raise" [expression ["," expression ["," expression]] ...

  6. [Python学习笔记][第八章Python异常处理结构与程序调试]

    1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...

  7. python异常处理try,except,else,finally,raise

    先看下else的使用: try: ... exception: ... else: ... 只有在try中没有发生任何异常,所有代码完全成功的情况下才会转入else 再看下finally: final ...

  8. Python 异常处理

    Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言 ...

  9. python异常处理的哲学

    所谓异常指的是程序的执行出现了非预期行为,就好比现实中的做一件事过程中总会出现一些意外的事.异常的处理是跨越编程语言的,和具体的编程细节相比,程序执行异常的处理更像是哲学.限于认知能力和经验所限,不可 ...

随机推荐

  1. 整合91平台接入的ANE

    来源:http://www.swfdiy.com/?p=1328 91平台接入的SDK只有objectC版和java版, 现在如果要在AIR里使用SDK,只能编写ANE整合进来. 91SDK = 几个 ...

  2. oracle批量操作

    https://stackoverflow.com/questions/39576/best-way-to-do-multi-row-insert-in-oracle 1 批量insert 方式一: ...

  3. FastDFS+Nginx搭建Java分布式文件系统

    一.FastDFS FastDFS是用c语言编写的一款开源的分布式文件系统.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用FastDFS ...

  4. Python学习日记(十三) 递归函数和二分查找算法

    什么是递归函数? 简单来说就是在一个函数中重复的调用自己本身的函数 递归函数在调用的时候会不断的开内存的空间直到程序结束或递归到一个次数时会报错 计算可递归次数: i = 0 def func(): ...

  5. 修改CentOS的YUM源

    CentOS配置本地yum源/阿里云yum源/163yuan源并配置yum源的优先级 1.查看本地yum源 2.把默认yum源备份 mkdir /opt/centos-yum.bak mv /etc/ ...

  6. C++(三十七) — 字符串的函数重载—案例

    1.MyString.h 头文件 #pragma once #include <iostream> using namespace std; class MyString { public ...

  7. Linux硬盘满了,系统速度贼慢,居然是Jenkins.log太大了

    用查找命令找出大于1G的文件 find / -size +1G -print 为什么jenkins.log会产生40+G的文件? 以上在Windows上的时候,运行了几个月,也没有发生这种现象? 而在 ...

  8. TODO : 一些新的学习计划

    1.读完jvm那本书 2.加深Android的开发知识 3.编写atx的demo 4.跑几个apk的性能测试并做详细的性能分析 5.尝试实现一个uiautomator多个手机同时执行脚本的可能性(连线 ...

  9. Keras神经网络data generators解决数据内存

    在使用kears训练model的时候,一般会将所有的训练数据加载到内存中,然后喂给网络,但当内存有限,且数据量过大时,此方法则不再可用.此博客,将介绍如何在多核(多线程)上实时的生成数据,并立即的送入 ...

  10. 为什么在项目中data需要使用return返回数据呢?

    问:为什么在项目中data需要使用return返回数据呢? 答:不使用return包裹的数据会在项目的全局可见,会造成变量污染:使用return包裹后数据中变量只在当前组件中生效,不会影响其他组件.