3zz*_*zzy 11 python printing exception
提出异常和打印错误之间的区别是什么.
例如,使用以下内容的好处是什么:
if size < 0:
raise ValueError('number must be non-negative')
Run Code Online (Sandbox Code Playgroud)
而不是简单地:
if size < 0:
print 'number must be non-negative'
Run Code Online (Sandbox Code Playgroud)
我是新手,请放轻松我.:)
引发错误会在此时暂停整个程序(除非捕获到异常),而打印消息只是写了一些东西stdout- 输出可能是通过管道输送到另一个工具,或者有人可能没有从命令行运行您的应用程序,并且print可能永远不会看到输出.
例如,如果您的代码如下所示:
if size < 0:
print 'size must be non-negative'
else:
print size * 4
Run Code Online (Sandbox Code Playgroud)
我把你的脚本称为:
yours.py number_source.txt | sum_all_lines.sh
如果yours.py在数字之间输出纯文本,那么也许我sum_all_lines.sh会失败,因为它期待所有数字.但是,如果yours.py由于异常退出,那么sum_all_lines.sh将无法完成,并且我将清楚为什么总和失败了.
当然,这只是一个例子,你的具体情况可能完全不同.
这取决于您是否可以size < 0在size < 0检测到的位置处理.
如果你可以通过直接打印来处理它,那么print,否则,引发一个异常,将该条件的处理委托给callstack上的某些东西,如下所示:
def divide_three_by(val):
if val == 0:
raise ValueError("Can't divide by 0")
return 3/val
try:
divide_three_by(some_value_from_user)
except ValueError:
print "You gave stupid input"
Run Code Online (Sandbox Code Playgroud)
在上面的(无可否认的非常人为的)示例中,divide_three_by如果传入0 ,函数不知道该怎么做 - 有时您可能只想打印一条消息(例如,如果val来自用户输入),有时您可能只想忽略它,并分配一个默认值.由于该函数不知道该怎么做,它应该将处理该条件的责任传递给callstack到任何调用它(如果它不能在那里处理,它将继续被传递到callstack直到某些东西处理它,或直到它达到顶级,此时你的程序将终止).
有关在Python中处理异常的更多信息,请参阅Python文档中的错误和异常教程.
| 归档时间: |
|
| 查看次数: |
3537 次 |
| 最近记录: |