有人可以帮我解释为什么这个python脚本不会运行?

时间:2010-12-04 06:37:57

标签: python debugging

import numbers

class base62(numbers.Number):
    digits='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    def __init__(self,value):
        if isinstance(value,int):
            self.value=value
            if value==0:
                self.string='0'
            else:
                self.string='' if value>0 else '-'
                while value!=0:
                    value,d=divmod(value,62)
                    self.string=self.digits[d]+self.string
        elif isinstance(value,(str,bytes)):
            assert(value.isalnum())
            self.string=str(value)
            self.value=0
            for d in value:
                self.value=self.value*62+self.digits.index(d)
    def __int__(self):
        return self.value
    def __str__(self):
        return self.string
    def __repr__(self):
        return self.string


Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> import base62
>>> b = base62(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable
>>> 

2 个答案:

答案 0 :(得分:3)

base62似乎是您的模块和该模块中的函数的名称。尝试:

>>> import base62
>>> b = base62.base62(3)

答案 1 :(得分:2)

阅读错误消息:

TypeError: 'module' object is not callable

TypeError表示有一个Error,因为某些内容错误Type。有问题的是base62。这是因为base62是您module的名称,而不是callable。听起来,“可驯服”意味着“能够被称为”。

您想要调用的是在模块中 中定义的函数。该函数也被命名为base62,但该名称不能使用该函数,因为此时该名称代表模块。

幸运的是,模块中的函数表示为模块的属性。因此,您可以base62.base62访问base62base62属性(该语法中的第二个属性)base62(第一个)。在这种情况下,base62模块中的from base62 import base62函数。

或者,您可以通过告诉Python从模块导入什么来从模块中仅导入该函数。这是自然而然的,但不按照您可能期望的顺序编写:您将其写为{{1}}。 (同样,模块名称 - 你要从哪里导入 - 首先出现,而函数名称 - 从中​​导入的是 - 第二个。)