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 的顺序。
我创建了一个脚本来为我提供文件夹目录中的文件列表。但是,我偶尔会收到此错误。这是什么意思?
错误部分:
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 的顺序。