外部模块导致os.path.isfile返回错误的答案

时间:2014-07-29 23:08:06

标签: python

我在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版本上使用非常相似的测试用例无法重现该错误。

1 个答案:

答案 0 :(得分:0)

问题显然是mapping.MapDocument构造函数更改了当前的工作目录。这意味着您不是在原始工作目录下查找TestDir\Z_File,而是在不同的目录下查找它,并且没有这样的文件,并且isfile返回False没有这样的文件,不只是作为目录或其他非文件的东西。

在构建MapDocument之前,最好的解决方法可能是abspath所有路径。