【发布时间】:2016-01-08 18:45:07
【问题描述】:
我想用 IPython 运行一个 python 脚本,并且能够判断脚本是成功(一直运行)还是不成功(引发了异常)。
通常可以通过检查命令的返回值来判断命令是否成功,其中约定为 0 表示成功,其他整数表示错误(该值指示哪个错误)。这是使用python script.py 运行脚本时的行为,但在使用ipython script.py 时,IPython 会自动捕获错误并(毫无帮助地)返回退出代码 0。
如何在使用 IPython 运行脚本时禁用此行为?
顺便说一句,我需要在 IPython 而不是 Python 中运行脚本,因为该脚本是从 IPython 笔记本 (.ipynb) 生成的,并且包含一些 IPython 魔术命令。
这是一个最小的工作示例。
fail.py
#! /usr/bin/env python
mytext = 'Hello World!'
if __name__=="__main__":
print(missing_variable)
使用 IPython 运行脚本时,将异常打印到 stdout,返回值为 1,正确表示脚本失败。
~$ python fail.py
Traceback (most recent call last):
File "fail.py", line 4, in <module>
print(missing_variable)
NameError: name 'missing_variable' is not defined
~$ echo $?
1
使用 IPython 运行脚本时,会捕获异常并将回溯打印到 stdout,然后 IPython 退出并返回 0(这是不可取的,因为脚本没有成功)。
~$ ipython fail.py
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
~/fail.py in <module>()
2 mytext = 'Hello World!'
3 if __name__=="__main__":
----> 4 print(missing_variable)
NameError: name 'missing_variable' is not defined
~$ echo $?
0
【问题讨论】:
-
感谢您的链接!