Python调用Azure文件存储ShareDirectoryClient.from_directory_url报错求助
问题排查与解决方案
问题根因
- SDK版本过低:
azure-storage-fileshare包的from_directory_url静态方法从v12.1.0版本才开始提供,如果你安装的包版本低于该版本,会直接出现属性不存在的情况,也就是你hasattr判断不通过的核心原因。 - 变量名被意外覆盖:你第一个报错
'str' object has no attribute 'from_directory_url'说明ShareDirectoryClient已经被你代码里的其他逻辑赋值为字符串类型,不再是导入的类对象,自然无法调用类方法。 - 语法与方法调用逻辑错误:
- 第一段代码里
from_directory_url方法名和参数括号拆分到两行,等于你没有实际调用方法,只是把方法对象赋值给了变量,参数部分变成了无意义的独立元组。 - 第二段代码里
from_directory_url是类静态方法,不需要先实例化ShareDirectoryClient再调用,而且你调用方法后没有接收返回的客户端实例,等于操作无效。 - 代码中存在缺失导入的问题,比如
timezone、generate_share_sas、AccountSasPermissions都没有导入对应模块。
- 第一段代码里
修复方案
步骤1:升级Azure文件存储SDK
执行命令升级到最新版本:
pip install --upgrade azure-storage-fileshare
步骤2:清理重复变量名
检查所有代码,确认没有把ShareDirectoryClient作为普通变量名赋值为字符串、数字等其他类型值。
步骤3:修正后的完整代码示例
# 先补全所有需要的导入 from azure.storage.fileshare import ShareDirectoryClient, generate_share_sas, AccountSasPermissions from datetime import timedelta, datetime, timezone # 配置参数 accountName = "nsclusterhdistorage" shareName = "dev-archived-data" accountKey = "你的存储账户密钥" accountURL = f"https://{accountName}.file.core.windows.net" # 这里示例是共享根目录的URL,如果要访问子目录,在后面拼接子目录路径即可 detailedFileURI = f"{accountURL}/{shareName}" # 生成SAS令牌 now = datetime.now(timezone('UTC')) sasToken = generate_share_sas( account_name=accountName, share_name=shareName, account_key=accountKey, permission=AccountSasPermissions( read=True, write=False, delete=False, list=True, create=True ), expiry=now + timedelta(days=3650) ) # 正确调用类静态方法获取目录客户端实例 shrdDirClient = ShareDirectoryClient.from_directory_url( directory_url=detailedFileURI, snapshot=None, credential=sasToken ) # 后续就可以用shrdDirClient调用相关接口了,比如列出目录下的文件 for item in shrdDirClient.list_directories_and_files(): print(item.name)
内容的提问来源于stack exchange,提问作者user17058107
相关产品推荐
相关产品推荐

