我在iMAC(使用BOOTCAMP)的Windows7下运行Python 2.7,遇到了一个奇怪的问题或bug。这是我的问题脚本归结为要点:
import arcpy
import arcpy.mapping as mapping
import os
for fileName in os.listdir("TestDir"):
fullPath = os.path.join("TestDir", fileName)
#hexpath=':'.join(x.encode('hex') for x in fullPath)
#print hexpath
if os.path.isfile(fullPath):
print fullPath + " is a file"
desc = arcpy.Describe(fullPath)
if(desc.datatype == "MapDocument"):
#mxd = mapping.MapDocument(fullPath)
#del mxd
print "MAP FILE: " + fileName
else:
print fullPath + " is not a file"
当行" mxd ="评论我得到正确的输出
TestDir\A_layer.lyr is a file
TestDir\Mapfile1.mxd is a file
MAP FILE: Mapfile1.mxd
TestDir\Z_file is a file
当取消注释该行时,我得到:
TestDir\A_layer.lyr is a file
TestDir\Mapfile1.mxd is a file
MAP FILE: Mapfile1.mxd
TestDir\Z_file is not a file
打印的最后一行不同而且错误。 (如果我取消注释" del mxd"行,我会再次得到正确的行为。
没有详细了解外部模块的功能, 或者简单地将模块解雇为错误,我的问题是:
mapping.MapDocument方法中哪些错误或类型的错误可能会导致这样的行为?用户编写模块中的错误如何影响内置库的输出?
不幸的是,我没有找到arcpy模块的来源。它是供应商专有的。供应商断言,在他们的测试中,在同一平台和Python版本上使用非常相似的测试用例无法重现该错误。
答案 0 :(得分:0)
问题显然是mapping.MapDocument
构造函数更改了当前的工作目录。这意味着您不是在原始工作目录下查找TestDir\Z_File
,而是在不同的目录下查找它,并且没有这样的文件,并且isfile
返回False没有这样的文件,不只是作为目录或其他非文件的东西。
在构建MapDocument
之前,最好的解决方法可能是abspath
所有路径。