Parsr NameError和无限循环在Python客户端(PIP包)中

fdx2calv  于 2个月前  发布在  Python
关注(0)|答案(7)|浏览(60)

摘要

函数 send_documentwait_till_finished=Truesilent=False 时抛出 NameError: name 'file' is not defined 异常。当 wait_till_finished=Truesilent=True 时,它会陷入无限循环。我发现,在主分支上,这个错误可能已经被修复了,但是当前的 PIP 包没有更新这些更改。

重现步骤

  1. pip install parsr-client
  2. 在 Python shell 中执行:
>>> from parsr_client import ParsrClient
>>> parsr = ParsrClient("localhost:3001")
>>> request = parsr.send_document("someDocument.pdf", 
    config_path="config.json", document_name="someDocument", 
    wait_till_finished=True, silent=False)
> Polling server for the job <job-id>...
>> Progress percentage: 0
>> Job done!
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<timed exec> in <module>

/opt/anaconda/miniconda3/envs/docspy37/lib/python3.8/site-packages/parsr_client/parsr_client.py in send_document(self, file_path, config_path, server, document_name, revision, wait_till_finished, refresh_period, save_request_id, silent)
    148                     print('>> Job done!')
    149             return {
--> 150                 'file': file_path,
    151                 'config': config,
    152                 'status_code': r.status_code,

NameError: name 'file' is not defined
  1. 在 Python shell 中执行:
>>> from parsr_client import ParsrClient
>>> parsr = ParsrClient("localhost:3001")
>>> request = parsr.send_document("someDocument.pdf", 
    config_path="config.json", document_name="someDocument", 
    wait_till_finished=True, silent=True)
> Polling server for the job <job-id>...
# infinite loop, not finishing after document has been processed by server

预期行为

无错误且不陷入无限循环

wsewodh2

wsewodh21#

感谢@jvalls-axa
@mkosturek :您说得对,Python客户端上的函数send_document已经有更新,但更改仍在开发分支上 - 它们将在下一个次要版本发布时合并到主分支。
以下是当前函数签名:
Parsr/clients/python-client/parsr_client/parsr_client.py
69e6b9b中的第73行至第83行
| | defsend_document( |
| | self, |
| | file_path: str, |
| | config_path: str, |
| | server: str="", |
| | document_name: str=None, |
| | revision: str='major', |
| | wait_till_finished: bool=False, |
| | refresh_period: int=2, |
| | save_request_id: bool=False, |
| | silent: bool=True) ->dict: |
TLDR:将file参数重命名为file_path以避免使用保留的Python关键字file
感谢您指出这一点;从现在开始,我们将尝试使Python客户端与主分支保持PIP更新,而不是开发分支。

np8igboo

np8igboo2#

我的两分钱:我正在使用的parsr服务(通过docker)在使用parsr API(POST /document)时陷入了无限循环。
在降级到v0.12后修复。

6vl6ewon

6vl6ewon3#

我的两分钱:我正在使用的parsr服务(通过docker)在使用parsr API(POST /document)时陷入了无限循环。
在降级到v0.12后修复了这个问题。
感谢@marcpicaud。你能打开一个包含更多细节的问题吗?

vc6uscn9

vc6uscn94#

我的两分钱:我正在使用的parsr服务(通过docker)在使用parsr API(POST /document)时陷入了无限循环。
升级到v0.12后修复了这个问题。
嗨@marcpicaud
你能尝试使用0.12.1吗?我检查了一下,似乎一切都按预期工作......

wi3ka0sx

wi3ka0sx5#

使用Docker镜像v0.12.2和客户端v3.2.2,我在这里遇到了问题:

[2020-06-19T17:09:34] INFO  (parsr-api/6 on c122c2d7f93b): Running module: ReadingOrderDetectionModule, Options: {"minVerticalGapWidth":20,"minColumnWidthInPagePercent":15}

对我来说看起来像是无限循环。
在Docker镜像v0.12和客户端v3.1上运行正常。

enxuqcxy

enxuqcxy6#

我认为已经应用的修复解决了 silent=False 时的 NameError,但我认为它并没有解决 silent=True 时的无限循环问题。

问题似乎出在 140-148 行的缩进:
Parsr/clients/python-client/parsr_client/parsr_client.py
第 140 行到第 148 行的 f4410d7
| | while ('progress-percentage'inserver_status_response): |
| | ifnotsilent: |
| | print( |
| | '>> Progress percentage: {}'.format( |
| | server_status_response['progress-percentage'])) |
| | sleep(refresh_period) |
| | server_status_response=self.get_status(jobId)[ |
| | 'server_response'] |
| | print('>> Job done!') |
更新到 server_status_responseif not silent 块的一部分,所以如果设置了 silent=True,状态永远不会更新。
由于缩进的影响,如果你设置了 silent=False,即使任务没有完成,"Job done!" 也会在每次迭代中打印出来。
我很乐意打开一个 pull request,如果调整这个看起来是正确的解决方案?

wbgh16ku

wbgh16ku7#

我终于解决了在将文档发送时,通过将解析客户端降级到3.1.0版本后出现的"无限循环"问题。

相关问题