与标准库中的模块同名的模块,也需要导入相同的模块
A module that has the same name as a module in standard library and also need to import the same module
我正在尝试编写一个简单的字符串实用程序来生成随机字符串。
我在 utils
目录中有 string.py
,代码如下:
import string
import random
def generate_random_letters(str_len: int) -> str:
return ''.join(random.choice(string.ascii_letters) for _ in range(str_len))
我在交互式控制台中试过了...
>>> from string import generate_random_letters
>>> generate_random_letters(10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "xxx\app\utils\string.py", line 6, in generate_random_letters
return ''.join(random.choice(string.ascii_letters) for _ in range(str_len))
File "xxx\app\utils\string.py", line 6, in <genexpr>
return ''.join(random.choice(string.ascii_letters) for _ in range(str_len))
AttributeError: module 'string' has no attribute 'ascii_letters'
我尝试将 string.py
更改为 strings.py
并且有效。所以冲突的名字是第一个原因
我也尝试删除 import string
并简单地执行
return ''
并且有效。所以这是第二个原因。
我的目标是
import app.utils.string as string_util
string_util.generate_random_letters(10)
python3.7 可以吗?
如果不可能,我肯定需要更改文件名。
但也请随时为此类特定案例建议任何好的名称
但是,老实说,我认为以下任何一项都不好
_string.py
、my_string.py
、string_util.py
你应该尝试创建一个 package 说 pk_utils 或者 utils 和字符串可以是你包中的 modules/classes 之一。
在 utils 目录中创建 __init__.py
后 -
#!/usr/bin/env python
__all__ = [ "string" ]
在你的代码中 -
from utils import string # instead of import string
string.generate_random_letters()
好的!
您可以使用这样的目录结构来执行此操作:
请注意,每个目录级别都需要那些 init.py 文件。
我的 string.py 代码与你的匹配:
import string
import random
def generate_random_letters(str_len: int) -> str:
return ''.join(random.choice(string.ascii_letters) for _ in range(str_len))
我的aa_test_me.py代码:
import app.utils.string as string_util
print (string_util.generate_random_letters(10))
我正在尝试编写一个简单的字符串实用程序来生成随机字符串。
我在 utils
目录中有 string.py
,代码如下:
import string
import random
def generate_random_letters(str_len: int) -> str:
return ''.join(random.choice(string.ascii_letters) for _ in range(str_len))
我在交互式控制台中试过了...
>>> from string import generate_random_letters
>>> generate_random_letters(10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "xxx\app\utils\string.py", line 6, in generate_random_letters
return ''.join(random.choice(string.ascii_letters) for _ in range(str_len))
File "xxx\app\utils\string.py", line 6, in <genexpr>
return ''.join(random.choice(string.ascii_letters) for _ in range(str_len))
AttributeError: module 'string' has no attribute 'ascii_letters'
我尝试将 string.py
更改为 strings.py
并且有效。所以冲突的名字是第一个原因
我也尝试删除 import string
并简单地执行
return ''
并且有效。所以这是第二个原因。
我的目标是
import app.utils.string as string_util
string_util.generate_random_letters(10)
python3.7 可以吗?
如果不可能,我肯定需要更改文件名。
但也请随时为此类特定案例建议任何好的名称 但是,老实说,我认为以下任何一项都不好
_string.py
、my_string.py
、string_util.py
你应该尝试创建一个 package 说 pk_utils 或者 utils 和字符串可以是你包中的 modules/classes 之一。
在 utils 目录中创建 __init__.py
后 -
#!/usr/bin/env python
__all__ = [ "string" ]
在你的代码中 -
from utils import string # instead of import string
string.generate_random_letters()
好的!
您可以使用这样的目录结构来执行此操作:
请注意,每个目录级别都需要那些 init.py 文件。
我的 string.py 代码与你的匹配:
import string
import random
def generate_random_letters(str_len: int) -> str:
return ''.join(random.choice(string.ascii_letters) for _ in range(str_len))
我的aa_test_me.py代码:
import app.utils.string as string_util
print (string_util.generate_random_letters(10))