我使用两年时间拿下 工具箱的各种暗坑

前言:ArcGIS 的工具箱 ArcToolBox 允许用户添加、自定义工具箱和脚本,充分和 Python 结合,非常的方便,但是自定义的工具箱犹如一个黑盒子,总是出现莫名其妙的错误,陆陆续续两年时间,终于摸出了头绪!“限定”的错误

让我如此苦恼、如此害怕的,就是把写好的 Python 脚本封装成 ArcGIS 的工具箱。

ArcGIS 工具箱每次我把程序代码写好,也能正常的运行,然后将其导入自定义工具箱中,点击运行之前还得沐浴更衣好好的祈祷一番,愿天公助我。然而事与愿违,刚刚还好好的程序报错了,错误可谓是千奇百怪,大部分时候都在说谜语,明明显示第100行有什么什么错,结果一看,100行是空行...显然,ArcGIS 工具箱有一些特别的魔法,拥有一些专属自己的“限定”错误,这种错误只有在这里才能品味到。还不快跟着我尝一尝新鲜的魔法shit。Note:以下所有错误均是将脚本封装成工具箱后,运行才可能会出现的错误,请注意。Note:我一直使用的10.3版本,以下的所有错误不对非10.3的版本负责,当然其他版本也差不多。工具箱名字导致的错误

我们先从最简单的错误开始。工具箱名称导致的错误:

由于输出路径会自动填入工具箱的名字,中间有特殊符号的话,比如:“-”,就会报错。

缩进错误

诡异的错误来了,报错显示如下。我都不知道是说的什么鬼话,怎么还有缩进错误?

锁定到报错提示的地方,是这样的:

看上去非常正常,100%正常,开始我不信是这里的问题,我开始折腾,狂写 print 语句,使劲打断点,使劲测试,最后机缘巧合之下,我把中文注释移到了上方,然后就顺利运行了。# ...# 存在该字段else:# ...好吧,由于把 else 和中文注释写到一行,导致 else 被莫名其妙被跳过了,所以导致错误。两种“变量”错误

第一种:global name xx is not defined第二种:name xx is not defined

比如错误处的代码是这样的,在变量 pta2 的上面是一行中文注释:# ...# 二象限pta2 = (oX - length * 2, pta[1])# ...我们使用空行将报错的变量和中文注释隔开:# ...# 二象限pta2 = (oX - length * 2, pta[1])# ...于是乎,程序顺利运行了,原来如果在变量的上一行是中文注释,有可能会导致下面那一行被工具箱里面的神奇魔法规则跳过。自此,困扰我很久、经常让我折腾到深夜的各种暗坑终于有了解决方法。最后

个人的经验之谈,这里记录下来,希望能有所帮助和启发。荟GIS精粹,关注公众号:GIS荟欢迎交流,更多文章请使用搜索

(0)

相关推荐