文档智能这是咋了?
Traceback (most recent call last):
File "/Users/icourt/PycharmProjects/pythonProject/aliPDF2png.py", line 34, in submit_file
print(response.body.data.id)
AttributeError: 'NoneType' object has no attribute 'id'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/icourt/PycharmProjects/pythonProject/aliPDF2png.py", line 42, in
submit_file(pdf_file,file_name)
File "/Users/icourt/PycharmProjects/pythonProject/aliPDF2png.py", line 37, in submit_file
UtilClient.assert_as_string(error.message)
AttributeError: 'AttributeError' object has no attribute 'message'
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的错误信息和知识库中的相关资料,以下是问题的详细分析与解决方案:
错误描述
AttributeError: 'NoneType' object has no attribute 'id'
response.body.data.id
时,response.body.data
的值为 None
。这通常是因为文档处理任务未成功返回预期的结果。AttributeError: 'AttributeError' object has no attribute 'message'
error.message
,但 error
对象本身是一个 AttributeError
类型,不包含 message
属性。可能原因
response.body.data
为空。关键点
在调用 SubmitDocStructureJob
或 SubmitDocStructureJobAdvance
接口时,需验证返回的 response
是否包含有效的任务 ID。如果任务提交失败,response.body
可能为空或不包含 data.id
。
修改代码如下:
try:
response = client.submit_doc_structure_job_advance(request)
if not response.body or not hasattr(response.body, 'data') or not response.body.data.id:
raise ValueError("任务提交失败,未获取到有效的任务ID")
task_id = response.body.data.id
print(f"任务ID: {task_id}")
except Exception as e:
print(f"任务提交失败: {str(e)}")
根据知识库中的说明,任务处理结果需要通过轮询查询接口 GetDocStructureResult
获取。建议每 10 秒轮询一次,最多轮询 120 分钟。
示例代码如下:
import time
def check_task_status(task_id):
try:
for _ in range(720): # 最多轮询 120 分钟
request = docmind_api20220711_models.GetDocStructureResultRequest(id=task_id)
response = client.get_doc_structure_result(request)
if response.body.completed:
if response.body.status == "success":
print("任务处理成功")
return response.body
elif response.body.status == "failed":
raise ValueError(f"任务处理失败: {response.body.error_message}")
time.sleep(10) # 每 10 秒轮询一次
raise TimeoutError("任务处理超时")
except Exception as e:
print(f"任务状态查询失败: {str(e)}")
# 调用轮询函数
task_id = "docmind-20220902-824b****" # 替换为实际任务ID
result = check_task_status(task_id)
print(result)
确保上传的文档符合支持的格式(如 PDF、图片等),并检查文档内容是否完整。如果文档格式不支持或内容损坏,可能导致任务提交失败。
支持的文档格式包括: - 图片:.png
, .jpg
, .jpeg
, .bmp
, .gif
- 文档:.pdf
, .doc
, .docx
, .ppt
, .pptx
, .xls
, .xlsx
, .txt
, .epub
, .mobi
, .md
, .html
在捕获异常时,避免直接访问不存在的属性(如 error.message
)。可以改用通用的异常处理方式,打印完整的错误信息。
示例代码如下:
try:
# 调用接口逻辑
pass
except AttributeError as e:
print(f"属性访问错误: {str(e)}")
except Exception as e:
print(f"发生未知错误: {str(e)}")
任务提交阶段
确保任务提交成功,并获取有效的任务 ID。如果任务提交失败,需检查文档格式和内容是否符合要求。
任务状态查询阶段
使用轮询机制查询任务状态,确保任务处理完成后再访问结果数据。
异常处理优化
改进异常处理逻辑,避免因访问不存在的属性导致二次异常。
参考文档智能支持的格式
确保上传的文档格式在支持范围内,并检查文档内容是否完整。
通过以上步骤,您可以有效解决当前问题并提升代码的健壮性。如果问题仍未解决,请提供更多上下文信息以便进一步分析。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。