【问题标题】:random.choices can't be imported? [closed]random.choices 不能导入? [关闭]
【发布时间】:2021-01-17 14:17:26
【问题描述】:

这可能是一个简单的帖子,所以很抱歉,但我似乎无法让 random.choices() 导入

我的代码:

import random

scans = 100
foobar = []

for i in range(scans):
    string = 'https://'
    string.join(random.choices(string.ascii_lowercase + string.digits, k = url_len)) 
    string.join(random.choice(domains_list))
    foobar.append(string)
    del string

我得到:

AttributeError: 'module' object has no attribute 'choices'

作为 mac-os 终端的输出。

我试过了:

  • 重启编辑器

  • 使用from random import choices 代替(同时)import random

再次抱歉,如果这看起来像是垃圾邮件,但我已经用谷歌搜索了一段时间,但没有找到一个答案。

谢谢大家! :D

【问题讨论】:

  • 请出示您的完整代码,包括import 语句。这不是一个可重复的例子。还请显示您正在获得什么输出,以及您想要获得什么输出。
  • 将您遇到的错误粘贴到您的问题中也很有用 - 包括整个错误跟踪。
  • 嘿@MarkRansom!刚刚做了一个更新。添加了错误消息和更多代码。
  • random.choices 在 Python 3.6 中添加。你运行旧版本的 Python 吗?该错误的另一个原因可能是您调用了自己的脚本random.py。顺便说一句,你真的不需要 del string(无论如何,string 对变量来说是个坏名字)。
  • 您不应将变量命名为与模块相同的名称。这将导致混乱和/或错误。

标签: python python-import


【解决方案1】:

如果您像这样进行导入,则从模块中导入函数:

from random import choices

那么你的代码只需要引用那个函数,因为你还没有导入模块本身,所以 Python 不会知道你的代码中的模块名称:

choices(string.ascii_uppercase + string.digits, k = 10)

但如果你改为导入整个模块:

import random

那么你的代码需要同时引用模块和函数,因为 Python 知道函数的唯一方法是通过导入的模块:

random.choices(string.ascii_uppercase + string.digits, k = 10)

如果您收到此错误:

AttributeError: 'module' object has no attribute 'choices'

那么这可能意味着您可能还在使用旧的 Python 版本,它根本没有 choices,因为它是在 Python 3.6 中添加的。

如果不是这样,那么您可能有一个名为 random.py 的文件被意外导入了。如果是这种情况,请参阅this question 了解更多详情。

但如果不了解有关您的 python 版本和本地文件的更多详细信息,就不可能确切地说出您为什么会遇到该特定错误。

上述代码中的另一个问题是这一行 - 它覆盖了您的 import string 语句,并将 string 设置为实际字符串(您的字符串是 'foobar' 但任何字符串都会导致问题):

string = 'foobar'

当您之后引用string 模块时,由于您已经用字符串'foobar' 覆盖了它,因此尝试使用该模块(例如string.ascii_uppercase)将导致这种错误:

AttributeError: 'str' object has no attribute 'ascii_uppercase'

【讨论】:

  • 但是如何修复AttributeError
  • 现在 OP 已经编辑了他们的实际错误和完整代码,我无法重现错误;他们的代码有问题,比如命名字符串string
  • @Matthias 我更新了我的答案以反映 OP 的补充。
  • 很好的编辑。赞成。
猜你喜欢
  • 2021-11-18
  • 2021-12-04
  • 2022-11-25
  • 2017-12-13
  • 2021-12-18
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 2012-07-24
相关资源
最近更新 更多