发生异常:Python中的ModuleNotFoundError

时间:2019-02-04 12:09:32

标签: python

我是Python的新手,我从编程开始。我写了捆绑在三个软件包中的几个函数。所有软件包都具有BaseFunction,该BaseFunction在三个软件包之外扩展了另一个BaseFunction。

例如,此函数扩展BaseScalingFunctionClass,而此类扩展BaseFunctionClass

隐藏软件包:

from abc import ABCMeta, abstractmethod
import matplotlib.pyplot as plt


class BaseFunctionClass():

    def __init__(self):
        pass

    @abstractmethod
    def getValue(self, x: float) -> float:
        pass

    def plot(self, x):
        y = []
        for val in x:
            y.append(self.getValue(val))

        plt.plot(x, y)
        plt.show()

在包装内:

import sys 
sys.path.append(r"C:\path")

from BaseFunction import BaseFunctionClass

class BaseScalingFunctionClass(BaseFunctionClass):

    def __init__(self):
        pass

from BaseScalingFunction import BaseScalingFunctionClass 
import numpy as np
class HaarScalingFunction(BaseScalingFunctionClass):

    def __init__(self):
        pass

    def getValue(self, x: float) -> float:
        if(-1/2 < x and x <= 1/2): 
            return 1.0
        return 0.0

    def plot(self):
        x = np.arange(-2, 2, 0.01)
        super().plot(x)

如果我尝试使用以下命令,一切都会正常运行

instance = HaarScalingFunction()
instance.plot()

instance = BaseScalingFunctionClass()
print(instance)

现在,我想编写一个返回两个BaseFunction的标量积的方法。

from numpy import trapz
from BaseFunction import BaseFunctionClass
from ScalingFunctions.HaarScalingFunction import HaarScalingFunction

class Calculation():

    def __init__(self):
        pass

    def innerProduct(self, function1: BaseFunctionClass, function2: BaseFunctionClass) -> float: 
        return trapz(function1.getValue * function2.getValue)

HaarScalingFunction1 = HaarScalingFunction()
HaarScalingFunction2 = HaarScalingFunction()
calculation = Calculation()

print(calculation.innerProduct(HaarScalingFunction1, HaarScalingFunction2))

如果我尝试运行此命令,则会收到以下异常:

  

发生异常:ModuleNotFoundError   没有名为“ BaseScalingFunction”的模块

     

文件“ C:\ path”,模块中的第2行      从BaseScalingFunction导入BaseScalingFunctionClass

     

文件“ C:\ path”,模块中的第3行       从ScalingFunctions.HaarScalingFunction导入HaarScalingFunction

我不明白,为什么在HaarScalingFunction中不再找到模块BaseScalingFunction,因为它是在我的测试中找到的?

非常感谢您的帮助

Matthias

编辑

我添加了一些插件,发现行

from BaseScalingFunction import BaseScalingFunctionClass 
HaarScalingFunction中的

是未解决的导入。我将行更改为

from ScalingFunctions.BaseScalingFunction import BaseScalingFunctionClass 

,现在错误消失了。这意味着我不详细了解导入的使用方式。如果我在HaarScalingFunction.class中启动代码,而不是从其他类中使用该类,则为什么不使用前一行代码呢?

我假设如果启动文件,则将当前工作目录设置为该文件,因此找到了另一个文件,因为该文件位于同一子文件夹中。在第二种情况下,我启动了另一个文件,因此工作目录不再能够找到我的文件。有人可以确认这一点还是矛盾?

0 个答案:

没有答案