【问题标题】:Python: how to solve ImportErrorPython:如何解决 ImportError
【发布时间】:2012-11-18 15:17:02
【问题描述】:

我在一个名为 SymbolManager.py 的文件中有以下类:

from qgis.core import *

class SimbolManager:
  def __init__(self):
    self.initSymbols()

  def initSymbols(self):
    self.symbolMap = {}
    props = {'color': '0,0,200'}
    self.symbolMap['SimpleVertex'] = QgsMarkerSymbolV2.createSimple(props)

    props = {'width': '1', 'color': '0,0,255'}
    self.symbolMap['SimpleLine'] = QgsLineSymbolV2.createSimple(props)

  def getSymbolRenderer(self, name):
    symb = self.symbolMap[name]
    if symb is not None:
      return QgsSingleSymbolRendererV2(symb)
    return None

我尝试从同一目录中的文件导入SymbolManager

from PyQt4 import QtCore, QtGui
from Ui_OsmNavigator import Ui_OsmNavigator

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *

import DbConnection

from SymbolManager import SymbolManager  // HERE IS THE PROBLEM

当我从 QGIS 内部运行脚本时,它给了我以下错误:

第 28 行,在 from SymbolManager import SymbolManager ImportError: cannot import name SymbolManager

我做错了什么?

【问题讨论】:

  • 请使用pyflakespylint,最好以与您的编辑器集成的方式(Emacs+flymake+pyflakes+pep8 做一个很棒的即时检查器) , 例如)。附言PEP8 强烈反对使用import *——它会将失败的导入延迟到您尝试使用它们的位置,因此在执行过程中稍后会得到"NameError: FOO" 而不是"NameError: FOO"
  • 另外,我怀疑您的getSymbolRenderer 可能有问题:如果在字典中找不到namesymbolName[name] 将引发错误。您以后检查if symb is not None 将无济于事。相反,我会使用return QgsSingleSymbolRendererV2(self.symbolMap[name]) if name in self.symbolName else None
  • @ErikAllik:感谢您的建议。你可以想象,我根本不是 python 开发者。

标签: python class import


【解决方案1】:

因为你的班级不叫SymbolManager

class SimbolManager: 
      ^^^^^^

【讨论】:

  • 那么编译器会告诉你什么而不是“无法导入”?也许“无法导入,因为您不小心输入了您的班级名称”?
猜你喜欢
  • 2021-04-14
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 2019-10-25
相关资源
最近更新 更多