Python-2个参数而不是一个?

拉克希亚·拉吉(Lakshya Raj)

Python代码:

class Importer:
    from importlib import __import__, reload
    from sys import modules

    libname = ""
    import_count = 0
    module = None

    def __init__(self, name):
        self.libname = name
        self.import_count = 0

    def importm(self):
        if self.libname not in self.modules:
            self.module = __import__(self.libname)
        else:
            print("must reload")
            self.module = self.reload(self.module)
        self.import_count += 1

# test out Importer

importer = Importer("module")

importer.importm() # prints Hello
importer.importm() # prints Hello
importer.importm() # prints Hello (again)
print(importer.import_count)

上面的Python(3.8.1)代码位于OnlineGDB上,如果运行,它将给出一个错误:

TypeError: reload() takes 1 positional argument but 2 were given

当我importlib用Python打开该库时,我看到以下内容:


# ... (previous code; unnecessary)

_RELOADING = {}


def reload(module): ## this is where reload is defined (one argument)
    """Reload the module and return it.

    The module must have been successfully imported before.

    """
    if not module or not isinstance(module, types.ModuleType): ## check for type of module
        raise TypeError("reload() argument must be a module")
    try:
        name = module.__spec__.name
    except AttributeError:
        name = module.__name__

    if sys.modules.get(name) is not module: ## other code you (probably) don't have to care about
        msg = "module {} not in sys.modules"
        raise ImportError(msg.format(name), name=name)
    if name in _RELOADING:
        return _RELOADING[name]
    _RELOADING[name] = module
    try:
        parent_name = name.rpartition('.')[0]
        if parent_name:
            try:
                parent = sys.modules[parent_name]
            except KeyError:
                msg = "parent {!r} not in sys.modules"
                raise ImportError(msg.format(parent_name),
                                  name=parent_name) from None
            else:
                pkgpath = parent.__path__
        else:
            pkgpath = None
        target = module
        spec = module.__spec__ = _bootstrap._find_spec(name, pkgpath, target)
        if spec is None:
            raise ModuleNotFoundError(f"spec not found for the module {name!r}", name=name)
        _bootstrap._exec(spec, module)
        # The module may have replaced itself in sys.modules!
        return sys.modules[name]
    finally:
        try:
            del _RELOADING[name]
        except KeyError:
            pass

# ... (After code; unnecessary)

所有双井号(##)注释都是我的

很明显,reloadDOES具有1个参数,并且检查该参数是否为模块。OGDB(OnineGDB)代码中,我只传递了一个参数(很确定),并且它的类型是module(最有可能)。如果我删除该参数(可以编辑OGDB),它将给出:

TypeError: reload() argument must be module

因此出于某种原因,Python一直认为我的争论比实际要多。使它起作用的唯一方法是编辑importlib文件以使其reload具有两个参数(不是一个好主意)。

我尝试运行PDB,没有帮助。

有人能发现明显不对的地方吗,例如实际上有两个论点?

拉克希亚·拉吉(Lakshya Raj)

我需要做的是将imports放在类之外,以使其正常工作。这是新的OGDB致谢@ L3viathan代码如下:

from importlib import __import__, reload
from sys import modules

class Importer:
    libname = ""
    import_count = 0
    module = None

    def __init__(self, name):
        self.libname = name
        self.import_count = 0

    def importm(self):
        if self.libname not in modules:
            self.module = __import__(self.libname)
        else:
            print("must reload")
            self.module = reload(self.module)
        self.import_count += 1

# test out Importer

importer = Importer("module")

importer.importm() # prints Hello
importer.importm() # prints Hello
importer.importm() # prints Hello (again)
print(importer.import_count)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python 2到3“ TypeError:需要一个类似字节的对象,而不是'str'”

来自分类Dev

在一个句子中而不是一个单词中找到一个单词(python)

来自分类Dev

在Python中,为什么list(None)是一个错误,但[None]不是一个错误?

来自分类Dev

Python Crontab覆盖上一个作业,而不是创建一个新作业

来自分类Dev

Python:更新图而不是创建一个新图

来自分类Dev

Python从字典中删除一个值而不是键

来自分类Dev

在Python中获取第一个和最后一个函数参数

来自分类Dev

python Tkinter的第一个参数

来自分类Dev

Python属性的默认参数是一个函数

来自分类Dev

创建一个以列表或整数作为参数的函数(Python)

来自分类Dev

Python:TypeError:*之后的参数必须是一个序列

来自分类Dev

使用另一个函数的参数-Python

来自分类Dev

在python中创建一个主要函数并传递参数

来自分类Dev

Python 错误:其中一个参数是必需的

来自分类Dev

第一个参数是 class 或 self 的 Python 方法

来自分类Dev

在关闭 python 的线程之后返回一个参数

来自分类Dev

如何强制2个Python子进程一个接一个地运行

来自分类Dev

使用python在一个列中减去2个数字一个文件

来自分类Dev

如何强制2个Python子进程一个接一个地运行

来自分类Dev

当需要传递一个参数时,Python询问两个参数

来自分类Dev

如何编写一个带有两个参数的python函数,一个是列表

来自分类Dev

一个分支而不是两个分支的 Python 条件表达式

来自分类Dev

在Python中的一组可选参数中声明一个位置参数

来自分类Dev

在__init__中定义一个类属性,而不是在另一个类方法中定义-python

来自分类Dev

为什么在Python OOP中使用Getters / Accessors是一个好习惯(或不是一个好习惯)?

来自分类Dev

Python赋予另一个名称而不是`* args`的可读性是一个好习惯吗?

来自分类Dev

使用 python 为一个网站而不是另一个网站提供结果的 Scrapy 代码

来自分类Dev

为什么当我输入一个整数时,这显示为不是一个整数?(Python)

来自分类Dev

从两个选择中选择一个强制性参数的Python函数

Related 相关文章

  1. 1

    Python 2到3“ TypeError:需要一个类似字节的对象,而不是'str'”

  2. 2

    在一个句子中而不是一个单词中找到一个单词(python)

  3. 3

    在Python中,为什么list(None)是一个错误,但[None]不是一个错误?

  4. 4

    Python Crontab覆盖上一个作业,而不是创建一个新作业

  5. 5

    Python:更新图而不是创建一个新图

  6. 6

    Python从字典中删除一个值而不是键

  7. 7

    在Python中获取第一个和最后一个函数参数

  8. 8

    python Tkinter的第一个参数

  9. 9

    Python属性的默认参数是一个函数

  10. 10

    创建一个以列表或整数作为参数的函数(Python)

  11. 11

    Python:TypeError:*之后的参数必须是一个序列

  12. 12

    使用另一个函数的参数-Python

  13. 13

    在python中创建一个主要函数并传递参数

  14. 14

    Python 错误:其中一个参数是必需的

  15. 15

    第一个参数是 class 或 self 的 Python 方法

  16. 16

    在关闭 python 的线程之后返回一个参数

  17. 17

    如何强制2个Python子进程一个接一个地运行

  18. 18

    使用python在一个列中减去2个数字一个文件

  19. 19

    如何强制2个Python子进程一个接一个地运行

  20. 20

    当需要传递一个参数时,Python询问两个参数

  21. 21

    如何编写一个带有两个参数的python函数,一个是列表

  22. 22

    一个分支而不是两个分支的 Python 条件表达式

  23. 23

    在Python中的一组可选参数中声明一个位置参数

  24. 24

    在__init__中定义一个类属性,而不是在另一个类方法中定义-python

  25. 25

    为什么在Python OOP中使用Getters / Accessors是一个好习惯(或不是一个好习惯)?

  26. 26

    Python赋予另一个名称而不是`* args`的可读性是一个好习惯吗?

  27. 27

    使用 python 为一个网站而不是另一个网站提供结果的 Scrapy 代码

  28. 28

    为什么当我输入一个整数时,这显示为不是一个整数?(Python)

  29. 29

    从两个选择中选择一个强制性参数的Python函数

热门标签

归档