Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.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_Pydev - Fatal编程技术网

Python PyDev中的伪未解析导入错误

Python PyDev中的伪未解析导入错误,python,eclipse,pydev,Python,Eclipse,Pydev,PyDev正在报告不存在的导入错误。初始症状是一个虚假的“未解决的导入”错误,该错误由以下组合修复: 清理项目 重新索引项目(删除解释器,再次添加) 重新启动Eclipse 向巨蟒神烧香 现在错误是“未验证导入变量”--它似乎找不到pymssql.connect 这不是Pyhtopath问题。我可以很好地访问模块,文件中有(声称)错误的代码运行良好——它有单元测试和生产代码调用它 错误在PyDev中的某个地方:我在PyDev项目中添加了一个新模块,错误只发生在新模块中。以上我都试过了 所以

PyDev正在报告不存在的导入错误。初始症状是一个虚假的“未解决的导入”错误,该错误由以下组合修复:

  • 清理项目
  • 重新索引项目(删除解释器,再次添加)
  • 重新启动Eclipse
  • 向巨蟒神烧香
现在错误是“未验证导入变量”--它似乎找不到pymssql.connect

这不是Pyhtopath问题。我可以很好地访问模块,文件中有(声称)错误的代码运行良好——它有单元测试和生产代码调用它

错误在PyDev中的某个地方:我在PyDev项目中添加了一个新模块,错误只发生在新模块中。以上我都试过了


所以,我计划在其他地方发布这段代码,以征求对设计的一些意见,在评论中我被要求发布代码。(灵感来源:以及克林特·米勒对这个问题的回答:)。导入错误发生在第69行(self.connection=pymssql.connect…)。不确定这对回答问题有什么好处,但是

import pymssql
from util.require_type import require_type

class Connections(object):
    @require_type('host', str)
    @require_type('user', str)
    @require_type('password', str)
    @require_type('database', str)
    @require_type('as_dict', bool)
    def __init__(self, host, user, password, database, as_dict=True):
        self.host = host
        self.user = user
        self.password = password
        self.db = database
        self.as_dict = as_dict

    @staticmethod
    def server1(db):
        return Connections('','','','')

    @staticmethod
    def server2(db):
        pass

    @staticmethod
    def server3(db):
        pass


class DBConnectionSource(object):
    # Usage:
    #        with DBConnectionSource(ConnectionParameters.server1(db = 'MyDB)) as dbConn:
    #            results = dbConn.execute(sqlStatement)

    @require_type('connection_parameters', Connections)
    def __init__(self, connection_parameters=Connections.server1('MyDB')):
        self.host = connection_parameters.host
        self.user = connection_parameters.user
        self.password = connection_parameters.password
        self.db = connection_parameters.db
        self.as_dict = connection_parameters.as_dict
        self.connection = None

    def __enter__(self):

        parent = self

        class DBConnection(object):
            def connect(self):
                self.connection = pymssql.connect(host=parent.host,
                                                  user=parent.user,
                                                  password=parent.password,
                                                  database=parent.db,
                                                  as_dict=parent.as_dict)

            def execute(self, sqlString, arguments={}):
                if self.connection is None:
                    raise Exception('DB Connection not defined')
                crsr = self.connection.cursor()
                crsr.execute(sqlString, arguments)
                return list(crsr)

            def cleanup(self):
                if self.connection:
                    self.connection.close()

        self.connection = DBConnection()
        self.connection.connect()
        return self.connection

    def __exit__(self, typ, value, traceback):
        self.connection.cleanup()

尝试在出现错误的行中使用
ctrl+1
,并添加一条注释,说明您希望导入。这应该解决PyDev错误,因为它进行静态代码分析,而不是运行时分析。

我在抛出错误的行末尾添加了#@UndefinedVariable

这不是一个永久性的修复,但至少它暂时摆脱了我屏幕上的红色。如果有更好的长期解决方案,我会很高兴听到

TL;DR版本:阅读第五个灰色框。

您(和我)的问题似乎是由于多个级别的导入导致的,这些导入应该正确处理,但没有正确处理。在这条线路的某个地方,链接丢失了

假设你有一个文件

foo/bar.py
在该文件中,有一个名为

wazoo=15
如果您尝试:

from foo import bar
from bar import wazoo <-- false error here
这些问题似乎确实消失了

另外,我注意到,对于导入文件中新定义的符号,有时似乎会发生这种情况。 此外,该文件中某些符号的早期错误将神奇地消失,只剩下新的错误。这意味着可能有某种状态文件未被清理,即使是在“buildall”等情况下

还请注意,当我使用Python enum hack时,这个问题似乎对我来说最为常见……也许这将为PyDev elopers提供一个线索(PyDev是否仍在维护中?)

bar.py:

def enum(**enums):
  return type('Enum', (), enums)

SOMETHING = enum(A=1, B=2)
someotherfile.py:

from foo import bar
from bar import SOMETHING
...
x = SOMETHING.A

请发布代码,谢谢。我很高兴,我只是不知道我会发布什么,除了一个导入语句(import pymssql)和一个函数调用(pymssql.connect)。我相当肯定这是PyDev环境的问题,因为我可以运行我编写的代码;我认为前面几行显示了import语句,让我们知道您要导入哪个版本的egg+Python版本+PyDev版本+Eclipse版本
>>>导入pymssql>>>pymssql.\uu版本\uuuu'2.0.0'
还有:Python 2.7.3、Eclipse 4.2、PyDev 2.7.1。对不起,我以为我把这些放在OP里了。所以,我用的是Mac电脑。我尝试了Command-1,它给了我一个选项列表:“创建方法”、“创建类”和“@UndefinedMethod”。单击最后一个选项没有任何作用。@BenDundee您是否转到问题所在的行?应该有一个选项,可以说一些类似于忽略错误或添加注释的内容。这是我看到的(临时链接,30天后过期):@BenDundee我将在我的家庭环境中工作后检查此选项。@BenDundee哦,我知道你在哪里,请转到导入行并向我显示该屏幕截图
def enum(**enums):
  return type('Enum', (), enums)

SOMETHING = enum(A=1, B=2)
from foo import bar
from bar import SOMETHING
...
x = SOMETHING.A