使用Python通过shareplum连接SharePoint时报list index out of range错误
问题排查解决步骤
首先明确:src\lxml\etree.pyx是lxml库的C扩展源文件,你本地安装的是编译后的lxml版本,没有该源文件是正常现象,不需要关注这个问题。本次报错的本质是shareplum解析SharePoint返回的XML响应时,响应内容为空/结构不符合预期,导致取索引时越界,可按以下步骤排查:
- 修正URL协议
SharePoint Online强制使用HTTPS协议,你当前代码里的认证地址和站点地址都使用了http,全部替换为https即可,修改后参考代码:
- 修正URL协议
from shareplum import Site from shareplum import Office365 from shareplum.site import Version authcookie = Office365('https://XXXXX.sharepoint.com/', username='XXXXXXXXXX', password='*********').GetCookies() site = Site('https://XXXXX.sharepoint.com/sites/Trial', version=Version.v365, authcookie=authcookie) folder = site.Folder('Shared Documents/General')
- 修正上传参数格式
upload_file方法第一个参数要求传入二进制内容,你当前传入的是字符串'Hello',需要改为字节类型,修改后参考代码:
- 修正上传参数格式
# 上传字符串内容的修改版 folder.upload_file(b'Hello', 'new.txt') # 上传本地文件的参考写法 with open('本地文件路径.txt', 'rb') as f: folder.upload_file(f.read(), 'new.txt')
- 验证路径有效性
先确认Shared Documents/General文件夹在目标站点下实际存在,你可以先测试连接根文档库验证基础功能是否正常:
- 验证路径有效性
# 测试根文档库连接,打印文件列表 folder = site.Folder('Shared Documents') print(folder.files)
如果这一步就报错,说明站点连接本身存在问题,继续向下排查。
- 验证站点连接有效性
先核对站点URL是否正确,同时测试站点基础连接是否正常:
- 验证站点连接有效性
# 打印站点下所有列表名称,验证连接和认证是否正常 print(site.ListNames())
如果这一步报错,说明认证失败或者站点URL填写错误,需要核对账号密码、站点地址是否正确,也可以先在网页端登录该账号,确认可以正常访问目标站点。
- 验证账号权限
确认当前使用的账号有Shared Documents/General文件夹的编辑/上传权限,可以直接在网页端登录该账号,手动往目标文件夹上传一个文件,确认操作可以正常完成,排除权限不足的问题。
- 验证账号权限
内容的提问来源于stack exchange,提问作者Yogesh Makone
相关产品推荐
相关产品推荐

