何时使用try和except?

如果我获得零分区错误,那么尝试和尝试的解决方案很差
除非可以使用if-sales解决.
但是,如果一个程序用完记忆,我应该让它崩溃
正确的?因为如果没有,我必须在任何地方写异常
预防吧?
那么,我什么时候实际使用try-except?
如果可以有几个例外,我只想捕获1或2?
喜欢
尝试:
布拉哈巴
除了某个eRror:
做一点事

# 回答1


8月29日,11:23*AM,CNB 我不确定您是否想做,但我认为要抓住一个
ZerodivisionError异常是try-Except的良好使用.
我也不确定我会说你只是让程序崩溃
用完记忆.我认为从用户的角度来看,您
想检查记忆条件并提出例外
表明已经达到了一些内存阈值.那时
提出了例外,您应该向用户注明并退出
优雅.
# 回答2


8月29日,下午1:23,CNB 只要您可以在块中做一些 *有意义的 *
处理异常(例如恢复).是否有任何有意义的行动
您可以在记忆力用完时服用吗?如果是(例如,写当前
数据到磁盘并打开一个通知用户的弹出窗口),然后
使用尝试/除外,否则不要. IOW代码如下
尝试:
...
除了MemoryError:
打印"你没记忆!"
通常没有用;最好让异常传播到顶部
与完整的追溯.
hth,
乔治
# 回答3


8月29日,7:40*下午,丹尼尔 我不确定您是否想做,但我认为要抓住一个
ZerodivisionError异常是try-Except的良好使用.
我也不确定我会说你只是让程序崩溃
用完记忆. *我认为从用户的角度来看,您
想检查记忆条件并提出例外
表明已经达到了一些内存阈值. *那时
提出了例外,您应该向用户注明并退出
优雅.

ZerodivisionError更好地避免了一个if-rause,不是吗
思考?这是一个可预测的例外...

# 回答4


cnb 这取决于.如果不太可能零分段,那么事情可能会[*]
在不检查的情况下运行更快.如果速度是您感兴趣的,那
是...
格伦
[*]尚未检查,所以不要真正知道:-)
# 回答5


在2008年8月29日星期五上午10:56上午10:56,CNB 我不确定您是否想做,但是我认为抓住AzerodivisionError异常是很好的使用.我认为从用户的角度来看,您应该检查记忆条件,并提出一个例外,表明已经达到了一些内存阈值.当thatexcept 抬高离子,您应该向用户注明并出口.

ZerodivisionError更好地避免了一个if-rause,不是吗
思考?这是一个可预测的例外...
基本上,有一个一般原则(EAFP:更容易问
宽恕比允许)在python中只是"尝试"某事和
如果出现问题,请捕获异常.相比之下
到c您应该在哪里"在跳跃之前看"(lbyl)和
执行操作之前,请检查可能的错误条件.
Python方法的主要优点之一是
操作本身首先出现在代码中:
尝试:
a = b/c
除了ZerodivisionError:
#处理它
与LBYL方法:
如果C == 0:
#Handle错误
a = b/c
如果错误处理代码的确不足,则最终
分散您实际上要执行的操作.
这个单独的案例(除以0)可能不是应得的最好的例子
简单起见,但是您明白了.
- 克里斯

# 回答6


8月29日,1:56*pm,CNB ZerodivisionError更好地避免了一个if-rause,不是吗
思考?这是一个可预测的例外...
许多毕达斯塔斯人会不同意这一点.
无论如何,有一些类型的错误是捕捉异常
更健壮,因为时间之间存在差距
检查和使用的时间,在这种情况下可以
改变.
例如,以下测试可能会遭受零星的失败:
如果OS.PATH.EXISTS(文件名):
F =打开(文件名)
在呼叫os.path..exists和打开的呼叫之间,文件
可以通过另一个过程删除,这将导致一个未经手的
例外.另外,有时由于其他原因无法打开文件,
作为权限.
对于诸如零分割之类的东西,本地价值无法
零测试和操作之间的更改(不常见
情况),所以这只是您采取哪种方式的风格问题.
卡尔银行
# 回答7


8月29日,上午7:23,CNB 好吧,从错误中恢复可以简单地告诉用户
发生在保释之前,因此鉴于记忆中的程序是
会失败,这并不意味着您不应该捕获错误和
更优雅地失败.
当然,记忆是一个特别困难的例子,因为您可能不会
有内存要准备输出...
# 回答8


8月29日,2:33*PM," Chris Rebert" 基本上,有一个一般原则(EAFP:更容易问
宽恕比允许)在python中只是"尝试"某事和
如果出现问题,请捕获异常.相比之下
到c您应该在哪里"在跳跃之前看"(lbyl)和
执行操作之前,请检查可能的错误条件.
我不会说Python中EAFP的可能性
使用lbyl. (错误检查似乎太广泛了.
应用一个 显而易见的方式.
有时是DFTCFE"别忘了检查错误".
我倾向于使用EAFP检查是否发生了"错误"(缺少
文件,无效输入等)和lbyl对于可以预期的条件
发生有效输入,即使可以测试该条件
尝试...除外.例如,我会写这样的东西:
如果x不是没有:
y = x.calculate_value()
别的:
y = default_value
我这样做的主要原因是要记录没有预期的
X的有效值,而不是问题的发生.但这纯粹是
风格问题,这两种方式都是错误的.
卡尔银行
# 回答9


卡尔·班克斯(Carl Banks)写道:
使用CPYTHON时,Python级别的EAFP总是涉及到lbyl
C级.对于任何检查的程序员来说,都应该很明显
同一件事两次通常是浪费时间和资源.
# 回答10


在文章<00 **********************************************@k7g2000hsd.g中
卡尔银行 8月30日,2:03*am,fredrik lundh 使用CPYTHON时,Python级别的EAFP总是涉及到lbyl
C级.
我认为这不是真的.例如,这是代码
实际上在Open()函数中打开文件:
if(null == f-> f_fp && null!= name){
py_begin_allow_threads
f-> f_fp = fopen(名称,newmode);
py_end_allow_threads
}
如果(f-> f_fp == null){
显然,它试图打开文件,如果失败,则处理错误.
EAFP,即使没有使用异常.
当然,在fopen的下面可能会有lbyl,但这就是
在系统库级别或操作系统级别上.也许是
C级的一部分是您的意思,因为这些家伙可能是
用C写成
但是我仍然认为我们不称呼说lbyp *总是发生在c
级别,因为在某些情况下,库和系统调用Python
包装依赖于处理器异常和类似的内容.意思是
任何LBYPING都在CPU内部进行,因此它处于硬件级别.
我意识到所有这些都是您的观点.
好吧,如果有一部分的表现很重要,我会使用
EAFP.没什么大不了的.
卡尔银行

标签: python

添加新评论