我尝试了一个带有 1 个摄像头的简单 Unity 程序,该程序带有跟踪姿势驱动器。结果如下所示:当给定 XYZ 格式的欧拉角时:向上俯仰 <=> X 减小向下俯仰 &...
我尝试了一个带有 1 个摄像头和一个跟踪姿势驱动器的简单 Unity 程序。结果如下所示:
当给定 XYZ 格式的欧拉角时:
所有证据似乎表明 Unity 欧拉角使用 LDB(左下后)坐标系,具有右手旋转和右手轴顺序。
然而,在处理四元数时,许多文献暗示使用左手系统。
这些文件说的是事实吗?如果是,那么在不同协议之间转换时会造成很多麻烦。这种分歧的目的是什么?
更新:
经过进一步挖掘,似乎 VSCode 或 Ununtu(不确定是哪个)试图强制使用 sys.excepthook
.
简短回答:
您只需 excepthook
用自定义 excepthook 覆盖 即可。然后, _formatting.py
(由 调用 IPython
,由 调用 Jupyter
)可以成功用 覆盖 sys.excepthook
( apport_python_hook.apport_excepthook
我怀疑)。
正如 AldegarRızvan 回答 中所述 ,只需将此代码放在导入语句之前, Jupyter
它就可以工作:
import sys
def custom_exception_hook(exctype, value, traceback):
# Your custom exception handling code here
print(f"Exception Type: {exctype}\nValue: {value}")
sys.excepthook = custom_exception_hook
# Rest of the code
注意:这仅适用于 Python 脚本,不适用于运行 Python 的活动终端。我怀疑终端 Python 会话已经是交互式的,因此您将遇到不同的问题。请参阅 原始答案 和 更多详细信息 ,以使其在终端中工作。
更多细节:
如上所述, Jupyter
似乎调用了 IPython
具有 _formatt在断言之前放入,g.py
代码行 assert sys.excepthook is apport_python_hook.apport_excepthook
调用 sys.excepthook = apport_python_hook.apport_excepthook
in _formatting.py
那么 这也会起作用 。但这基本上与注释掉断言行相同。
进一步检查 apport_python_hook.apport_excepthook
,我发现问题实际上发生在其中 if not likely_packaged(binary):
的一行, apport_python_hook.py
因为它检查我的工作目录是否以预定义的字符串列表开头:
pkg_whitelist = [
"/bin/",
"/boot",
"/etc/",
"/initrd",
"/lib",
"/sbin/",
"/opt",
"/usr/",
"/var",
]
但是我从 \'/home/...\' 运行代码,而它不在该列表中。这会结束执行,只是返回任何内容,导致断言失败。但是,尝试将 \'/home\' 添加到此列表会导致一系列不同的问题。所以这也不起作用。
注意:这意味着该问题实际上是某种 python3.10/ubuntu 22.10 问题,因为我可以通过导入 BaseExceptionGroup 来重新创建错误: from exceptiongroup import BaseExceptionGroup
.
上面提供的答案(简短答案)似乎是目前最优雅的解决方案。但是,这仅适用于在 Python 脚本中运行它的情况。如果正在运行 IPython
或 Jupyter
原始答案 中所述 .
原始答案:
我的设置和错误和您一模一样。我找遍了所有地方,似乎找不到这个问题的任何其他痕迹。
对 的依赖有关, Jupyter's
因为 IPython
在终端中 ipython --pylab
运行时,我得到了完全相同的错误 可以 直接进入 jupyter
终端,它确实会加载帮助页面。但是当我调用 时 jupyter --version
,它首先会说 Selected Jupyter core packages...
然后开始回溯。
我发现的唯一“解决方案”是进入文件 _formatting.py
并注释掉 assert sys.excepthook is apport_python_hook.apport_excepthook
第 394 行。保存后,我能够启动一个交互式 shell IPython
,然后就可以 Jupyter
运行了。
注意:注释掉该行后,我可以 jupyter --version
在终端中运行并查看输出内容:
jupyter --version
Selected Jupyter core packages...
IPython : 8.25.0 <---- NOTICE THIS?! (IPyhton package, not version)
ipykernel : 6.29.4
ipywidgets : 8.1.2
jupyter_client : 8.6.1
jupyter_core : 5.7.2
jupyter_server : 2.14.0
jupyterlab : 4.1.6
nbclient : 0.10.0
nbconvert : 7.16.3
nbformat : 5.10.4
notebook : 7.1.2
qtconsole : 5.5.1
traitlets : 5.14.2
IPython
是第一个被调用的包,这进一步支持了我的理论,即问题不在于 Jupyter
,而是 IPython
.
我想强调的是,这个“解决方案”并不理想,我强烈建议 不 要这样做,但它可能会帮助您/其他人进行故障排除。