首页 > 解决方案 > 访问 API:TypeError:__init__() 得到了意外的关键字参数“编码”

问题描述

我正在尝试使用 ETL 工具 Alteryx 访问 API,但收到错误:

TypeError: __init__() got an unexpected keyword argument 'encoding'

我可以在 Python 2.7.16 中运行代码,但 Alteryx 中的版本是 3.6.0。我不得不将 xmlrpclib 所在的 JSONRPC 文件更改为 xmlrpc.client。然后我得到了No module named 'httplib'. 我不得不将 httplib 更改为 http.client。接下来,我得到了错误Cannot import name 'HTTP'。我看到了那条线,from httplib import HTTP, HTTPConnection我删除了HTTP. 最后,我为该jsonrpc文件使用了一个 web 2to3 python 转换器,并添加from urllib.parse import (splittype, splithost)到包中的行中jsonrpc。我现在到了最后两行,但遇到了编码参数错误。

我已经尝试安装msgpack,删除编码参数,并在 CurrentDirectory\Lib\json__init__.py中为 json 更改 cls = 编码。__init__.py

import pprint
from jsonrpclib import jsonrpc
from datetime import datetime
Transaction_Code = datetime.now().strftime('%Y%m%d%H%M%S')
givex = jsonrpc.ServerProxy("host:port")
response = givex.dc_1026('en', Transaction_Code, 'ID', 'password', 'reportname','','')
pprint.pprint(response)

我希望数据的 JSON 输出,但我收到以下 Traceback:

回溯(最后一次调用):文件“”,第 1 行,在文件“C:\Program Files\Alteryx\bin\Miniconda3\PythonTool_venv\lib\site-packages\jsonrpclib\jsonrpc.py”,第 289 行,调用中 回归自我。发送(self.__name,args)文件“C:\Program Files\Alteryx\bin\Miniconda3\PythonTool_venv\lib\site-packages\jsonrpclib\jsonrpc.py”,第 237 行,在 _request rpcid=rpcid, version=self. __version) 文件“C:\Program Files\Alteryx\bin\Miniconda3\PythonTool_venv\lib\site-packages\jsonrpclib\jsonrpc.py”,第 532 行,在转储中返回 jdumps(request, encoding=encoding) 文件“C:\ Program Files\Alteryx\bin\Miniconda3\PythonTool_venv\lib\site-packages\jsonrpclib\jsonrpc.py”,第 98 行,在 jdumps 中返回 json.dumps(obj, encoding=encoding) 文件“C:.py”,第 238 行,在转储“”中 TypeError: init () got an unexpected keyword argument 'encoding'

标签: pythonapi

解决方案


在@rickdenhaan的帮助下,我不得不在 Python 3.6 中使用 jsonrpclib-pelix 而不是 jsonrpclib


推荐阅读