python - 将 Python 3.5 项目转换为 Jython - UnicodeDecodeError : 'unicodeescape' codec can't decode bytes in position 4-10: illegal Unicode character

标签 python python-2.7 python-3.x jython-2.7

我的最终目的是将正在运行的 Python 项目转换为 Jython 解释器,因为将添加一些 Java API。

详细信息:

  • 最新的 Jython 是 2.7
  • 我的项目可以用 Python 3.5 运行

所以我采取了以下方法:

第一件事是利用 future 模块将我的项目转换为 Python 2.7,并对可执行文件进行巴氏杀菌。 这一步成功完成。

第二件事是将 Python 2.7 项目转换为 Jython 2.7 项目。 在Eclipse mars切换解释器,提示如下错误:

console: Failed to install '': java.nio.charset.UnsupportedCharsetException: cp0.

要解决它,来自 this post 的解决方案根据下图,通过将编码参数 -Dpython.console.encoding=UTF-8 传递给 java VM 来使用: enter image description here

再次尝试运行时竖起了大拇指。但不幸的是这里刚好出现了下图所示的错误。如果没有必要,我不打算更改任何导入的模块,所以我决定在这里寻求帮助。

pydev debugger: starting (pid: 4216)
Traceback (most recent call last):
  File "C:\Users\souzadan\.p2\pool\plugins\org.python.pydev_4.4.0.201510052309\pysrc\pydevd.py", line 2364, in <module>
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:\Users\souzadan\.p2\pool\plugins\org.python.pydev_4.4.0.201510052309\pysrc\pydevd.py", line 1784, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Users\souzadan\FirmwareDevTools\Workspaces\Eclipse\aPythonWorkspace\aPythonProject\aPythonFolder\aPythonFile.py", line 7, in <module>
    standard_library.install_aliases()
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\site-packages\future-0.15.2-py2.7.egg\future\standard_library\__init__.py", line 465, in install_aliases
    from future.backports.urllib import request
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\site-packages\future-0.15.2-py2.7.egg\future\backports\urllib\request.py", line 96, in <module>
    from future.backports import email
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\site-packages\future-0.15.2-py2.7.egg\future\backports\email\__init__.py", line 16, in <module>
    from future.utils import surrogateescape
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\site-packages\future-0.15.2-py2.7.egg\future\utils\surrogateescape.py", line 167, in <module>
    FS_ENCODING = 'ascii'; fn = b('[abc\xff]'); encoded = u('[abc\udcff]')
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\site-packages\future-0.15.2-py2.7.egg\future\utils\surrogateescape.py", line 25, in u
    return text.decode('unicode_escape')
UnicodeDecodeError: 'unicodeescape' codec can't decode bytes in position 4-10: illegal Unicode character
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\atexit.py", line 24, in _run_exitfuncs
    func(*targs, **kargs)
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\threading.py", line 297, in _MainThread__exitfunc
    t.join()
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\threading.py", line 128, in join
    raise RuntimeError("cannot join current thread")
RuntimeError: cannot join current thread
Error in sys.exitfunc:
Traceback (most recent call last):
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\atexit.py", line 24, in _run_exitfuncs
    func(*targs, **kargs)
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\threading.py", line 297, in _MainThread__exitfunc
    t.join()
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\threading.py", line 128, in join
    raise RuntimeError("cannot join current thread")
RuntimeError: cannot join current thread

通过命令行运行 Jython 会产生更短的错误日志:

Traceback (most recent call last):
  File "somePythonCode.py", line 7, in <module>
    standard_library.install_aliases()
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\site-packages\future-0.15.2-py2.7.egg\future\standard_library\__init__.py", line 465, in install_aliases
    from future.backports.urllib import request
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\site-packages\future-0.15.2-py2.7.egg\future\backports\urllib\request.py", line 96, in <module>
    from future.backports import email
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\site-packages\future-0.15.2-py2.7.egg\future\backports\email\__init__.py", line 16, in <module>
    from future.utils import surrogateescape
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\site-packages\future-0.15.2-py2.7.egg\future\utils\surrogateescape.py", line 167, in <module>
    FS_ENCODING = 'ascii'; fn = b('[abc\xff]'); encoded = u('[abc\udcff]')
  File "C:\Users\souzadan\FirmwareDevTools\Compilers\Jython2.7.0\Lib\site-packages\future-0.15.2-py2.7.egg\future\utils\surrogateescape.py", line 25, in u
    return text.decode('unicode_escape')
UnicodeDecodeError: 'unicodeescape' codec can't decode bytes in position 4-10: illegal Unicode character

有没有人知道如何以最优雅的方式解决这个错误?

A bug是在 Jython.org 上创建的,具有严重的严重性,因为许多人已经在使用最新的 Python 模块和解释器。他们可能希望将 Java 功能添加到他们的代码中。所以他们基本上必须走和我一样的路。将项目反向移植到 Python 2.7,然后再反向移植到 Jython 2.7。

在 python-future a feature request bug也被记录下来了。

最佳答案

正如 Roland Smith 所建议的,依赖 py4j 是将您的应用程序移植到 JVM 环境的好方法。

关于python - 将 Python 3.5 项目转换为 Jython - UnicodeDecodeError : 'unicodeescape' codec can't decode bytes in position 4-10: illegal Unicode character,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33631652/

相关文章:

python - 在 Python 中,需要一种有效的方法将 kdtree 索引映射到值

python - 从文件中读取模式并使用python写入另一个文件

python - 更改三元图中悬停时的标签 Plotly python

python - python 中的 all() 如何处理空列表

python - Tkinter Canvas 不显示图像

Python - 查找另一列中给定匹配字符串的列的平均值

python - 根据 input() 生成行和列

python - "Merge"替换 Keras/Tensorflow/Python3

python - 如何更改 Airflow 网络服务器中的 dag_default_view?

python - 在长时间运行的任务中终止 QThread 和 multiprocessing.pool 进程