如果我这样做(例如)
open("/snafu/fnord")
在 Python 中(并且文件不存在),我得到一个回溯和消息
IOError: [Errno 2] No such file or directory: '/snafu/fnord'
我想用 Python 的 C API(即嵌入在 C 程序中的 Python 解释器)获取上述字符串。我需要它作为一个字符串,而不是输出到控制台。
使用 PyErr_Fetch() 我可以获得异常的类型对象和值。对于上面的例子,值是一个元组:
(2, 'No such file or directory', '/snafu/fnord')
从我从 PyErr_Fetch() 获得的信息到 Python 解释器显示的字符串,是否有一种简单的方法? (不涉及自己为每种异常类型构造此类字符串。)
最佳答案
我认为 Python 异常是通过在异常实例上运行“str()”来打印的,它将返回您感兴趣的格式化字符串。您可以通过调用 PyObject_Str() 从 C 中获取它。此处描述的方法:
https://docs.python.org/c-api/object.html
祝你好运!
更新: 我有点困惑为什么 PyErr_Fetch() 返回给您的第二个元素是一个字符串。我的猜测是您收到了一个“非规范化异常”并且需要调用 PyErr_NormalizeException() 将该元组转换为一个“真正的”异常,它可以将自身格式化为您想要的字符串。
关于Python C API : how to get string representation of exception?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1001216/
我尝试使用Jasypt与BouncyCastlecrypro在Spring应用程序中提供(128位AES)来解密实体属性,同时使用Hibernate保存它们。但是当尝试保存实体时,我总是得到这个org.jasypt.exceptions.EncryptionOperationNotPossibleException。org.jasypt.exceptions.EncryptionOperationNotPossibleExceptionEncryptionraisedanexception.Apossiblecauseisyouareusingstrongencryptionalgor
我正在使用Jasypt加密库来加密/解密一些文本。此代码嵌入到WAR文件中并部署到服务器。在本地运行时,在单元测试中,加密/解密循环工作得很好。我使用Jetty来开发应用程序。该代码在该服务器中完美运行。出于某种原因,部署到Tomcat会中断它,但出现以下异常:仅供引用,我在本地和服务器环境中都安装了强大的加密库,并且我使用的是最新的1.6版本(补丁级别25)。org.jasypt.exceptions.EncryptionOperationNotPossibleException异常没有消息。代码是完全对称的。我把它贴在这里进行检查。以下是相关位:我找到一个oldNabblepost
...ifyoudon'tallowmultipleaccountswiththesameemailaddress,ausercannotcreateanewaccountthatsignsinusingaGoogleAccountwiththeemailaddressex@gmail.comiftherealreadyisanaccountthatsignsinusingtheemailaddressex@gmail.comandapassword.我能够使用已通过电子邮件提供商注册的同一电子邮件登录Google提供商,因此Google提供商替换了电子邮件提供商,后者随后无法登录Fi
我正在努力寻找这里出了什么问题。我正在处理一个模式:它有一个Story实体(表:故事),我正在尝试向这个stories.portofoliotype_id添加一列,这是一个外国PortfolioType(表:portofoliotypes)的键。我想我的注释是正确的,我什至记录了MySQL查询,它得到以下查询,这是正确的。我正在尝试创建一个新故事:插入故事(backlog_id,描述,iteration_id,名称,parent_id,portfoliotype_id,state,storyPoints,storyValue,treeRank)值(11,null,null,“调试故事”