Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyDev抛出异常";“资源不存在”;重新打开项目时_Python_Eclipse_Eclipse Rcp_Pydev - Fatal编程技术网

Python PyDev抛出异常";“资源不存在”;重新打开项目时

Python PyDev抛出异常";“资源不存在”;重新打开项目时,python,eclipse,eclipse-rcp,pydev,Python,Eclipse,Eclipse Rcp,Pydev,在我的RCP应用程序中,当我关闭并重新打开PyDev项目时,PyDev在控制台上抛出一个异常,抱怨项目资源不存在。之后一切似乎都正常,但我当然希望避免向我的用户显示虚假的异常 从堆栈跟踪中导航可以看出,PyDev的内容提供者期望项目资源存在,而事实并非如此。也许我应该在检测到项目关闭时调用PyDev中的一些API?还是这是一只虫子?我注意到5.1.2版的问题,但是升级到最新版本(5.4.0)并没有解决这个问题 编辑: 我发现通过右键单击project->Open project打开项目不会引发异

在我的RCP应用程序中,当我关闭并重新打开PyDev项目时,PyDev在控制台上抛出一个异常,抱怨项目资源不存在。之后一切似乎都正常,但我当然希望避免向我的用户显示虚假的异常

从堆栈跟踪中导航可以看出,PyDev的内容提供者期望项目资源存在,而事实并非如此。也许我应该在检测到项目关闭时调用PyDev中的一些API?还是这是一只虫子?我注意到5.1.2版的问题,但是升级到最新版本(5.4.0)并没有解决这个问题

编辑:

我发现通过
右键单击project->Open project
打开项目不会引发异常。仅当通过双击打开项目时。双击打开的项目不会导致问题,只需双击关闭的项目即可。在框架有机会实际打开项目之前,PyDev重新定向操作(PyOpenPythonFilaction)似乎已经被调用

编辑2:

事实上,比这更奇怪。引发异常的重定目标操作是
PyOpenResourceAction
(但失败的是超类
pyopenpythonfilection
中的
run()
实现)。异常在
if(viewer.isExpandable(container)){
的第110行抛出。那里的eclipse资源代码正在根据一些标志位检查资源类型,我不知道为什么它返回false。我设置了一个保护,只检查属于Project类型的资源,并且该项目存在且已打开,但仍然失败

编辑3:

pyopenpythonfilection
中,包装

if (viewer.isExpandable(container)) {
    viewer.setExpandedState(container, !viewer.getExpandedState(container));
}
UIJob
中,给它500毫秒的延迟似乎可以解决这个问题

这是带有堆栈跟踪的控制台输出。关闭并重新打开的项目名为“站点”

!ENTRY org.python.pydev.shared_core 1 1 2016-12-06 16:31:28.037 !消息资源“/site”不存在。 !堆栈1 org.eclipse.core.internal.resources.ResourceException:资源“/site”不存在。 位于org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:335) 位于org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:209) 位于org.eclipse.core.internal.resources.Project.checkAccessible(Project.java:141) 在org.eclipse.core.internal.resources.Project.hasneature(Project.java:521)上 位于org.eclipse.core.internal.resources.Project.getNature(Project.java:405) 位于org.python.pydev.plugin.nature.PythonNature.getPythonNature(PythonNature.java:809) 位于org.python.pydev.navigator.PythonBaseModelProvider.getChildrenForIResourceOrWorkingSet(PythonBaseModelProvider.java:611) 位于org.python.pydev.navigator.PythonBaseModelProvider.getChildren(PythonBaseModelProvider.java:535) 位于org.python.pydev.navigator.PythonModelProvider.getChildren(PythonModelProvider.java:63) 位于org.python.pydev.navigator.PythonBaseModelProvider.haschilds(PythonBaseModelProvider.java:510) 位于org.eclipse.ui.internal.navigator.extensions.SafeDelegateTreeContentProvider.hasChildren(SafeDelegateTreeContentProvider.java:112) 位于org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.callNormalHasChildren(NavigatorContentServiceContentProvider.java:444) 位于org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.pipelineHasChildren(NavigatorContentServiceContentProvider.java:463) 位于org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.access$5(NavigatorContentServiceContentProvider.java:447) 位于org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider$3.run(NavigatorContentServiceContentProvider.java:413) 位于org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) 位于org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:392) 位于org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:436) 在org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable上(AbstractTreeViewer.java:2128) 位于org.eclipse.jface.viewers.TreeViewer.isExpandable(TreeViewer.java:538) 位于org.python.pydev.navigator.actions.PyOpenPythonFileAction.run(PyOpenPythonFileAction.java:110) 位于org.eclipse.ui.actions.RetargetAction.run(RetargetAction.java:225) 位于org.eclipse.ui.navigator.CommonNavigatorManager$2.open(CommonNavigatorManager.java:191) 位于org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:46) 位于org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:855) 位于org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) 位于org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:50) 位于org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:173) 位于org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:852) 位于org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1169) 位于org.eclipse.ui.navigator.CommonViewer.handleOpen(CommonViewer.java:451) 在org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:278)上 访问org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:272) 在org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:313) 位于org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 位于org.eclipse.swt.widgets.Display.sendEvent(Display.java:5219) 位于org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1340) 位于org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4553) 在org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4143)上 在org.eclipse.e4.ui.internal.workben