1

我正在尝试导入 base.py 中的类 PBase(它在同一个文件夹中)

所以我正在做以下事情

from base import PBase

但我收到以下错误

Traceback (most recent call last):
  File "test_pricing.py", line 9, in <module>
    from base import PBase
ImportError: cannot import name PBase

这是我的base.py

import yaml
import unittest, time, re

class PBase(unittest.TestCase):
    def enter_credentials(self, username, password):
        self.driver.find_element_by_id("id_username").clear
        self.driver.find_element_by_id("id_username").send_keys(username)
        self.driver.find_element_by_id("id_password").clear
        self.driver.find_element_by_id("id_password").send_keys(password)
        self.driver.find_element_by_css_selector("input.btn.btn-success").click()

    def get_credentials(self):
        with open('credentials.yml', 'r') as f:
            doc=yaml.load(f)
        return doc        

    def is_user_logged_in(self):
        f= "Account" in self.driver.find_element_by_css_selector(".navbar").text
        return f

    def log_in_user(self):
        self.driver.get(self.login_url)
        user_dict=self.get_credentials()
        username=user_dict["user"]["username"]
        password=user_dict["user"]["password"]
        self.enter_credentials(username, password)
        self.assertEqual(self.expected_logged_in_title, self.driver.title)

    def wait_for_chat_window(self, timeout=5):
        WebDriverWait(self.driver, timeout, poll_frequency=0.1).until(lambda b: b.find_element_by_id('habla_beta_container_do_not_rely_on_div_classes_or_names').is_displayed())
        time.sleep(3)

    def close_modal_window(self):
        driver=self.driver
        driver.find_element_by_xpath('//a[@class="close"]').click()


    def tearDown(self):
        if self.is_final_test==1:
            self.driver.quit()
4

1 回答 1

1

这可能是循环导入导致的问题。例如,尝试从 bar.py 导入需要来自 foo.py 的 Foo 的 Bar 需要在 bar.py 中定义的 Utils:

foo.py:

from bar import Utils


class Foo:
    def __init__(self):
        print("hello, from Foo")
        Utils.do_something()

和酒吧:

from foo import Foo


class Utils:
    @staticmethod
    def do_something():
        print("done something")


class Bar(Foo):
    def __init__(self):
        print('Hi, from Bar')

这给出了类似的问题,可以在 foo.py 中导入 bar 而没有任何问题,但是一旦尝试对 foo.py 中的类 Utils 进行任何引用,就会出现各种错误,例如前面的代码导致:

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from bar import Bar
  File "bar.py", line 1, in <module>
    from foo import Foo
  File "foo.py", line 1, in <module>
    from bar import Utils
ImportError: cannot import name 'Utils' from 'bar' (bar.py)

这个问题很容易通过将 Utils 放在它自己的文件中来解决。

于 2021-05-04T10:27:49.230 回答