检索随机数字时出现TypeError

时间:2011-10-04 23:34:19

标签: python

我正在尝试生成一个随机的三位数扩展名:

>>>  ''.join(str(x) for x in random.sample(range(1,10),3))

它在提示符下工作。但是,当我运行程序时,它会引发TypeError: str object is not callable。这是我的路线:

    filename = hashlib.md5(imagefile.getvalue()).hexdigest() + 
              ''.join(str(x) for x in random.sample(range(1,10),3)) + '_thumb' + '.jpg'  

我在这里做错了什么以及如何解决?

感谢您的帮助。我之前在代码中调用过str,导致错误:

str=""
for c in i.chunks(): 
    str += c
...

3 个答案:

答案 0 :(得分:6)

您已将全局名称str(通常是指字符串类型)替换为其他内容(很可能是包含不重要字符串的变量)。 Python通常不会将这些类型的事物视为关键字(在Python 3.x中,TrueFalse已成为关键字,之前它们只是全局变量)。

也就是说,random.sample选择非重复值,这似乎不是“生成随机三位数扩展”问题的要求。也没有避免零。我只需从0-999(包括0-999)中选择一个随机数并对其进行适当格式化('%03d'或新格式中的等效)。

答案 1 :(得分:4)

我已经在控制台中尝试了它并在.py文件中调用它们都可以工作。

您确定在调用之前未在代码中的某处声明名为“str”的变量吗?

这有效:

import random
filename= ''.join(str(x) for x in random.sample(range(1,10),3))
print filename

此:

import random
str = ''
filename= ''.join(str(x) for x in random.sample(range(1,10),3))
print filename

提供您报告的相同错误。

答案 2 :(得分:3)

我会把声明分成小块:

val=imagefile.getvalue()
m=hashlib.md5(val)
sample=random.sample(range(1,10),3)
r=''.join(str(x) for x in sample)
filename = '{m}{r}_thumb.jpg'.format(m=m.hexdigest(),r=r)

以便回溯消息将指示哪个部分引发了异常。 然后,临时打印声明或调试器的使用将进一步缩小问题范围。

PS。只是一个猜测,但如果random.sample已设置为等于str,错误就有意义。

In [62]: random.sample='1'

In [63]: random.sample(range(1,10),3)
TypeError: 'str' object is not callable