Python中文
首页
教程
问答
标签
搜索
登录
注册
如何正确使用Python的capi和异常?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>如果我做一些像</p> <pre><code> >>> x = int(1,2,3,4,5) </code></pre> <p>我立即得到一个致命的错误(如果程序是在一个预先编写的脚本中,它将结束程序的执行)</p> ^{pr2}$ <p>并且<code>x</code>未定义:</p> <pre><code> >>> x Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'x' is not defined </code></pre> <p>如何在Python的capi中实现它呢?我找到了一些<a href="http://docs.python.org/2/c-api/exceptions.html">documentation</a>,但我不确定我是否知道如何正确使用它。在</p> <p>我一直在努力:</p> <ol> <li><p>打印:</p> <pre><code>if(something) { PyErr_SetString(PyExc_TypeError, "Oh no!"); PyErr_Print(); } </code></pre> <p>不幸的是,这只打印出异常,程序继续运行。另外,-如果我理解正确-<code>PyErr_Print()</code>会从某种队列中删除异常,这样Python就认为它已经被处理了。它看起来是这样的:</p> <pre><code>>>> import awesomemod >>> x = awesomemod.thing() TypeError: Oh no! >>> x # x is defined because the function returns None eventually >>> </code></pre></li> <li><p><code>PyErr_Occurred()</code>:</p> <pre><code>if(something) { PyErr_SetString(PyExc_TypeError, "Oh no!"); PyErr_Occurred(); } </code></pre> <p>行为:</p> <pre><code>>>> import awesomemod >>> awesomemod.thing() >>> TypeError: Oh no! >>> </code></pre> <p>所以有点晚了。。。</p></li> <li><p><code>return PyErr_Occurred()</code>:</p> <pre><code>if(something) { PyErr_SetString(PyExc_TypeError, "Oh no!"); return PyErr_Occurred(); } </code></pre> <p>行为:</p> <pre><code>>>> import awesomemod >>> awesomemod.thing() <type 'exceptions.TypeError'> >>> TypeError: Oh no! </code></pre> <p>这个真的很奇怪。</p></li> </ol> <p>我需要做什么来获得内置函数的行为?在</p> <p><strong>编辑:</strong>我尝试了@user2864740在评论中提出的建议,效果非常好!在</p> <pre><code> if(something) { PyErr_SetString(PyExc_TypeError, "Oh no!"); return (PyObject *) NULL; } </code></pre>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>通过设置异常对象或字符串,然后从函数返回<code>NULL</code>,在C中引发异常。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
无法使用Django/mongoengine连接到MongoDB(身份验证失败)
8 回答
无法使用Django\u mssql\u后端迁移到外部hos
6 回答
无法使用Django&Python3.4连接到MySql
10 回答
无法使用Django+nginx上载媒体文件
3 回答
无法使用Django1.6导入名称模式
9 回答
无法使用Django1.7和mongodb登录管理站点
7 回答
无法使用Djangoadmin创建项目,进程使用了错误的路径,因为我事先安装了错误的Python
9 回答
无法使用Djangockedi验证CBV中的字段
1 回答
无法使用Djangocketditor上载图像(错误400)
5 回答
无法使用Djangocron进行函数调用
9 回答
无法使用Djangofiler djang上载文件
2 回答
无法使用Djangokronos
6 回答
无法使用Djangomssql provid
10 回答
无法使用Djangomssql连接到带有Django 1.11的MS SQL Server 2016
8 回答
无法使用Djangomssq迁移Django数据库
9 回答
无法使用Djangonox创建用户
7 回答
无法使用Djangopyodb从Django查询SQL Server
5 回答
无法使用Djangopython3ldap连接到ldap
10 回答
无法使用Djangoredis连接到redis
10 回答
无法使用Django中的FK创建新表
3 回答