首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3 ModuleNotFoundError:没有名为“lot”的模块

Python3 ModuleNotFoundError:没有名为“lot”的模块
EN

Stack Overflow用户
提问于 2019-06-11 04:51:13
回答 2查看 23.6K关注 0票数 3

我正在尝试运行一个python3单元测试脚本,但是当它使用来自主枕的对象并遇到导入语句时,它给了我一个模块未找到的错误。当我运行主脚本本身并按预期运行代码时,我不会遇到这个错误。我得到的错误跟踪是:

代码语言:javascript
复制
Traceback (most recent call last):
  File "parkingLot_test.py", line 3, in <module>
    from source import parking  
  File "/home/stash/Desktop/parking-lot/parking-lot-1.4.2/parking_lot/parking_lot/bin/source/parking.py", line 1, in <module>
    import lot

ModuleNotFoundError: No module named 'lot'

目录结构如下:

代码语言:javascript
复制
├── file_inputs.txt
├── parking_lot
├── parkingLot_test.py
├── run_functional_tests
├── setup
└── source
    ├── car.py
    ├── __init__.py
    ├── lot.py
    ├── main.py
    ├── parking.py

单元测试文件parkingLot_test.py的代码

代码语言:javascript
复制
import unittest
from source import parking  

class ParkingTest(unittest.TestCase):

    @classmethod
    def MakeClass(cls):
        cls.parking = parking.Parking()
        cls.allocated_slot = 1

    def test_a_create_parking_lot(self):
        parking_slots = 6
        self.parking.create_parking_lot(parking_slots)
        self.assertEqual(len(self.parking.slots), parking_slots,
                         msg="Wrong parking lot created")

    def test_b_park(self):
        registration_no = "MH-12-FF-2017"
        colour = "Black"
        self.parking.park(registration_no, colour)
        self.assertFalse(
            self.parking.slots[self.allocated_slot].available, "Park failed.")
        for i in self.parking.slots.values():
            if not i.available and i.car:
                self.assertEqual(i.car.registration_no,
                                 registration_no, "Park failed")
                self.assertEqual(i.car.colour, colour, "Park failed")

    def test_c_leave(self):
        self.parking.leave(self.allocated_slot)
        self.assertTrue(
            self.parking.slots[self.allocated_slot].available, "Leave failed.")

    @classmethod
    def RemoveClass(cls):
        del cls.parking


if __name__ == '__main__':
    unittest.main()

导入的文件parking.py的代码

代码语言:javascript
复制
import lot
import car


class Parking:
    """
    Parking class which has details about parking slots
    as well as operation performed on parking are present here
    """

    def __init__(self):
        self.slots = {}

    def create_parking_lot(self, no_of_slots):
        """This method will create parking lot if not present already with given
        number of slots.
        Input: no_of_slots - Integer Type
        """
        no_of_slots = int(no_of_slots)

        if len(self.slots) > 0:
            print("Parking Lot already created")
            return

        if no_of_slots > 0:
            for i in range(1, no_of_slots+1):
                temp_slot = lot.ParkingSlot(slotNum=i,
                                            availability=True)

                self.slots[i] = temp_slot
            print("Created a parking lot with %s slots" % no_of_slots)
        else:
            print("Number of slots provided is incorrect.")
        return

    def get_nearest_available_slot(self):
  ...................

我怎样才能解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2019-06-11 05:04:10

因为python 3不支持隐式相对导入。可以使用显式相对导入。

parking.py中尝试使用下面的行来代替导入

from . import lot

票数 6
EN

Stack Overflow用户

发布于 2019-06-11 06:31:51

在同一个目录级别的文件中,当您在另一个目录中导入一个文件时,使用相对导入,如

parking.py文件中,导入lot.py文件作为

代码语言:javascript
复制
import .log

当从一个目录导入到较低目录(即导入parkingLot_test.py中的批量)时,请使用from source import lot

并在源文件夹中的__init__.py文件中写入

代码语言:javascript
复制
import .lot
import .parking

就像这样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56536673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档