使用PyDev打开文件时“Preload additional info”内部错误排查
环境信息
- Eclipse平台:版本2024-06 (4.32),构建ID:I20240601-0610
- Eclipse PyDev插件:12.2.0.202409031913
- wxPython:4.2.2
- wxFormBuilder:版本4.2.1-0-g80c4cb6
问题现象
在Eclipse中用PyDev打开文件时,弹出错误对话框:
发生问题
‘Preload additional info’遇到问题。
“Preload additional info”期间发生内部错误。
详细信息:“Preload additional info”期间发生内部错误。输入字符串无效:“11(1)”
注:偶尔会用PSPad编辑文件,其状态栏显示“1:1(1)”表示第1行第1列。
点击确定后编辑功能正常,但执行程序时,Python代码里的GUI事件与事件处理程序绑定混乱,会调用错误的处理程序。
错误日志1:“Preload additional info”内部错误
eclipse.buildId=4.32.0.I20240601-0610 java.version=17.0.6 java.vendor=Eclipse Adoptium BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US Command-line arguments: -os win32 -ws win32 -arch x86_64 org.eclipse.core.jobs Error Mon Sep 23 12:55:42 EDT 2024 An internal error occurred during: "Preload additional info". java.lang.NumberFormatException: For input string: "11 (1)" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) at java.base/java.lang.Integer.parseInt(Integer.java:668) at java.base/java.lang.Integer.parseInt(Integer.java:786) at org.python.pydev.core.DeltaSaver$1.compare(DeltaSaver.java:232) at org.python.pydev.core.DeltaSaver$1.compare(DeltaSaver.java:1) at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:360) at java.base/java.util.TimSort.sort(TimSort.java:234) at java.base/java.util.Arrays.sort(Arrays.java:1307) at java.base/java.util.ArrayList.sort(ArrayList.java:1721) at java.base/java.util.Collections.sort(Collections.java:179) at org.python.pydev.core.DeltaSaver.findDeltas(DeltaSaver.java:226) at org.python.pydev.core.DeltaSaver.loadDeltas(DeltaSaver.java:196) at org.python.pydev.core.DeltaSaver.<init>(DeltaSaver.java:174) at com.python.pydev.analysis.additionalinfo.AbstractAdditionalInfoWithBuild.createDeltaSaver(AbstractAdditionalInfoWithBuild.java:109) at com.python.pydev.analysis.additionalinfo.AbstractAdditionalInfoWithBuild.init(AbstractAdditionalInfoWithBuild.java:50) at com.python.pydev.analysis.additionalinfo.AdditionalProjectInterpreterInfo.<init>(AdditionalProjectInterpreterInfo.java:114) at com.python.pydev.analysis.additionalinfo.AdditionalProjectInterpreterInfo.getAdditionalInfoForProject(AdditionalProjectInterpreterInfo.java:246) at com.python.pydev.analysis.additionalinfo.AdditionalProjectInterpreterInfo.getAdditionalInfoAndNature(AdditionalProjectInterpreterInfo.java:189) at com.python.pydev.analysis.additionalinfo.AdditionalProjectInterpreterInfo.getAdditionalInfoAndNature(AdditionalProjectInterpreterInfo.java:160) at com.python.pydev.analysis.additionalinfo.AdditionalProjectInterpreterInfo.getAdditionalInfo(AdditionalProjectInterpreterInfo.java:147) at com.python.pydev.analysis.additionalinfo.AdditionalProjectInterpreterInfo.getAdditionalInfo(AdditionalProjectInterpreterInfo.java:137) at com.python.pydev.analysis.builder.PreloadAdditionalInfoPyEditListener$1.run(PreloadAdditionalInfoPyEditListener.java:70) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
错误日志2:输入字符串无效:“16 (1)”
eclipse.buildId=4.32.0.I20240601-0610 java.version=17.0.6 java.vendor=Eclipse Adoptium BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US Command-line arguments: -os win32 -ws win32 -arch x86_64 org.python.pydev.shared_core Error Mon Sep 23 12:55:41 EDT 2024 For input string: "16 (1)" java.lang.NumberFormatException: For input string: "16 (1)" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) at java.base/java.lang.Integer.parseInt(Integer.java:668) at java.base/java.lang.Integer.parseInt(Integer.java:786) at org.python.pydev.core.DeltaSaver$1.compare(DeltaSaver.java:232) at org.python.pydev.core.DeltaSaver$1.compare(DeltaSaver.java:1) at java.base/java.util.TimSort.binarySort(TimSort.java:296) at java.base/java.util.TimSort.sort(TimSort.java:239) at java.base/java.util.Arrays.sort(Arrays.java:1307) at java.base/java.util.ArrayList.sort(ArrayList.java:1721) at java.base/java.util.Collections.sort(Collections.java:179) at org.python.pydev.core.DeltaSaver.findDeltas(DeltaSaver.java:226) at org.python.pydev.core.DeltaSaver.loadDeltas(DeltaSaver.java:196) at org.python.pydev.core.DeltaSaver.<init>(DeltaSaver.java:174) at org.python.pydev.ast.codecompletion.revisited.ProjectModulesManager.setProject(ProjectModulesManager.java:75) at org.python.pydev.ast.codecompletion.revisited.ASTManager.setProject(ASTManager.java:54) at org.python.pydev.plugin.nature.PythonNature$RebuildPythonNatureModules.run(PythonNature.java:185) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
问题疑问
- 这是Eclipse、PyDev还是wxPython等的问题?
- “additional info”来自哪些文件?
- 如何修复该问题?
问题解答
问题归属:这是PyDev插件的问题。从错误栈可以看到,报错发生在PyDev的
DeltaSaver类中,代码尝试将带括号的字符串(如"11 (1)")转为整数时触发了NumberFormatException。该字符串格式和PSPad状态栏标记一致,推测PSPad修改了PyDev存储额外信息的文件,导致解析失败。additional info的来源:PyDev的"additional info"存储在两处:一是项目根目录下的
.pydevproject相关缓存文件;二是Eclipse工作区的.metadata/.plugins/org.python.pydev目录下的项目分析缓存文件,这些文件用于存储代码分析、补全的增量信息。修复方案:
- 清理PyDev缓存:关闭Eclipse,删除工作区
.metadata/.plugins/org.python.pydev目录(或仅删除对应项目的缓存文件夹),重启Eclipse后PyDev会重新生成缓存。 - 重置项目PyDev属性:右键项目 -> PyDev -> Remove PyDev Nature,再重新添加PyDev Nature(右键项目 -> PyDev -> Set as PyDev Project),强制PyDev重新分析项目。
- 避免误编辑缓存文件:仅用PSPad编辑项目中的Python源代码文件,不要触碰PyDev生成的缓存文件,防止PSPad的状态栏标记写入缓存导致格式损坏。
- 更新PyDev插件:升级到PyDev最新版本,新版本可能修复了异常格式的解析问题。
- 清理PyDev缓存:关闭Eclipse,删除工作区
内容的提问来源于stack exchange,提问作者Den
相关产品推荐
相关产品推荐

