Pytest:模块不可调用

Pytest: Module is not callable

我知道在 SO 上还有其他关于 'module' object is not callable 的问题,但不清楚我的问题是如何成为这些问题的一个实例的。为什么尝试 Pytest(pytest 的新手)我只得到这个错误。尝试 运行 pytest 给了我 TypeError: 'module' object is not callable

我的目录结构:

    --appDir
      |--main.py
      |--__init__.py
      |--toolsDir
      |    |--handler.py
      |    |--db.py
      |    |--__init__.py
      |
      |--testDir
      |    |--main_test.py
      |    |--__init__.py

我的文件的简化版本:

main.py

from .toolsDir import handler

hdlr = handler.Handler()


def emp_exists(emp_num):
    res = hdlr.lookup_row(emp_num)

handler.py:

import time

from . import db

class Hanlder:
    def __init__(self):
        try:
            self.check_if_ready()
        except Exception as e:
            time.sleep(5)
            self.check_if_ready()
    
    @log
    def check_if_ready(self):
        if not db.table_exists()
        ...
    def lookup_row(self, _id):
        ...

main_test.py:

import pytest

def test_lookup_row():
    from ..main import emp_exists
    emp_exists(123)
    ...

对我来说,回溯似乎表明问题出在 Handler 中的 def check_if_ready(self) 方法 class:

回溯:


        def test_lookup_row():
    >       from ..main import emp_exists
    
    testDir\main_test.py:8:

    -

    main.py:19: in <module>
        from .toolsDir import handler
    toolsDir\handler.py:37: in <module>
        class Handler:
    -

        class Handler:
            def __init__(self):
                try:
                    self.check_if_ready()
                except Exception as e:
                    time.sleep(5)
                    self.check_if_ready()
    
            @log
    >       def check_if_ready(self):
    E       TypeError: 'module' object is not callable
    
    toolsDir\handler.py:55: TypeError

看起来您需要从根项目目录中删除 __init__.py。因为__init__.py表示所在目录是一个包。

最好不要使用相对导入,而是从项目根目录导入,例如:

# in main.py
from toolsDir.handler import Handler
hdlr = Handler()
...
# in handler.py
from toolsDir import db
...