Python os.walk() 失败

Python os.walk() failing

我创建了一个脚本来为我提供文件夹目录中的文件列表。但是,我偶尔会收到此错误。这是什么意思?

错误部分:

Script failed due to an error:
Traceback (most recent call last):
  File "<script>", line 12, in <module>
  File "C:\Program Files\Nuix\Nuix 6\lib\jython.jar\Lib\os.py", line 309, in walk
  File "C:\Program Files\Nuix\Nuix 6\lib\jython.jar\Lib\os.py", line 299, in walk
  File "C:\Program Files\Nuix\Nuix 6\lib\jython.jar\Lib\genericpath.py", line 41, in isdir
  File "C:\Program Files\Nuix\Nuix 6\lib\jython.jar\Lib\genericpath.py", line 41, in isdir
java.lang.AbstractMethodError: org.python.modules.posix.PythonPOSIXHandler.error(Ljnr/constants/platform/Errno;Ljava/lang/String;Ljava/lang/String;)V

    at jnr.posix.BaseNativePOSIX.stat(BaseNativePOSIX.java:309)

    at jnr.posix.CheckedPOSIX.stat(CheckedPOSIX.java:265)

    at jnr.posix.LazyPOSIX.stat(LazyPOSIX.java:267)

脚本:

import os
import codecs
import shutil
import datetime
import sys


exportpath = 'P:/Output/Export7/{6136BAF2-85BA-4E64-8C11-A2C59398FC02}/'
tempnativefolder = 'NATIVESOrig'


for dir, sub, file in os.walk(exportpath + tempnativefolder):
  for fname in file:
    #source path
    source = os.path.join(dir, fname).replace('\', '/')
    print source


print("Natives moved to subfolders")

我发现文件名中存在这些字符(参见屏幕截图中的 "diamond with question mark" 字符)导致了问题。一旦我替换了那些,我的脚本就可以工作了。非常感谢。

错误的含义:AbstractMethodError 表示某些代码试图调用未实现的方法。

PythonPOSIXHandler 实施 jnr.posix.POSIXHandler。 JRuby 也使用 JNR,两者的接口略有不同。 JRuby 的 JNR 新副本有一个额外的 #error(Errno, String, String) 方法,而 Jython 的实现缺少该方法,因为它是在该方法不存在时针对接口编译的。

我通常从另一个方向看到这个问题——Jython 的 jar 中的东西破坏了 JRuby。我认为这完全取决于类路径中 jars 的顺序。