IPython:名称错误:未定义名称'x'

问题描述 投票:0回答:1

使用Raspberry Pi 4和Raspbian OS。我正在尝试使用下面提到的代码从我的Python脚本访问BASLER相机。

from __future__ import print_function
import sys
from IPython.utils._tokenize_py2 import String
sys.path.append('.')
import numpy, ctypes
Pylonlib = "/opt/pylon5/lib64/libpylonc.so"
from ctypes import cdll
libc = cdll.LoadLibrary(Pylonlib)
libc.PylonInitialize()
#### call any plyon function after you have initialized
libc.PylonTerminate()

当我运行此代码时,出现名称错误。

Traceback (most recent call last):
   File "/home/pi/Desktop/cv_ex_1.py", line 3, in <module>
   from IPython.utils._tokenize_py2 import String
   File "/usr/lib/python3/dist-packages/IPython/utils/_tokenize_py2.py", line 46, in <module>
       del x
NameError: name 'x' is not defined

我该如何解决?

python-3.x python-2.7 ipython ctypes
1个回答
0
投票

请考虑代码段y = [x for x in [1,2,3]]。在Python 2中,x泄漏了出去,因此运行它后,全局x为3。Python3修复了此问题,因此在那里运行它会导致最后没有设置x

回到Python 2仍受支持并且可以安全使用时,IPython拥有两个不同的标记化库,一个称为_tokenize_py2,一个称为_tokenize_py3_tokenize_py2包含这两行:

__all__ = [x for x in dir(token) if not x.startswith("_")]
del x

第二个旨在解决该确切问题。但是,由于您使用的是Python 3,因此尚未在此处设置x,从而导致失败。您需要使用tokenize的Python 3版本。只需将_tokenize_py2切换为_tokenize_py3,即可完成此操作。

© www.soinside.com 2019 - 2024. All rights reserved.