You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python代码二次循环触发AttributeError错误的原因排查

问题排查:Python循环中出现AttributeError: 'str' object has no attribute 'letters'

先看看你提供的代码:

import random
import string
for x in range(0,15):
    print "something"
    string= str(random.choice(string.letters)+str(random.randint(100,10000))+random.choice(string.letters)+str(random.randint(0,100)))
    print string

以及报错信息:

something J6554r15 something
Traceback (most recent call last):
File "C:\Users\test\Desktop\soooo.py", line 8, in
string= str(random.choice(string.letters)+str(random.randint(100,10000))+random.choice(string.letters)+str(random.randint(0,100)))
AttributeError: 'str' object has no attribute 'letters'

问题原因

这是典型的变量名与模块名冲突搞出来的问题!

  • 一开始你导入了string模块,这时候string指向的是标准库的string模块对象,它有letters属性(注:Python3里这个属性已经改成string.ascii_letters,你这里应该是Python2环境)。
  • 第一次循环执行到string= str(...)这行时,你把生成的字符串赋值给了变量string,直接把原来的string模块给覆盖掉了!
  • 所以第二次进入循环时,string已经变成了一个普通字符串对象,而字符串根本没有letters属性,自然就抛出了这个错误。

解决办法

把你的变量名改个名字,别和模块名重名就行,比如改成random_str:

import random
import string
for x in range(0,15):
    print "something"
    random_str = str(random.choice(string.letters) + str(random.randint(100,10000)) + random.choice(string.letters) + str(random.randint(0,100)))
    print random_str

这样每次循环访问string.letters时,都是指向原来的string模块,就不会再报错啦。

内容的提问来源于stack exchange,提问作者Sarvesh EB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:03:14