我正在阅读一本电子书,这是我的代码:
import math
class QuadError( Exception ):
pass
def quad(a,b,c):
if a == 0:
ex = QuadError( "Not Quadratic" )
ex.coef = ( a, b, c )
raise ex
if b*b-4*a*c < 0:
ex = QuadError( "No Real Roots" )
ex.coef = ( a, b, c )
raise ex
x1= (-b+math.sqrt(b*b-4*a*c))/(2*a)
x2= (-b-math.sqrt(b*b-4*a*c))/(2*a)
return (x1,x2)
虽然我理解了尝试...除了函数内部的东西,我无法理解这个...... 我明白它做了什么,例如我使用quad(4,2,4)给我一个“No Real Roots”错误,或者quad(0,b,c) 但是我无法理解程序本身是如何工作的...... 所以,
if a == 0:
名为“ex”的varibale获取值:QuadError(“Not Quadratic”) 所以程序搜索其中有pass命令的Class QuadError ???那为什么要打印消息???我希望有类似......
class QuadError( Exception ):
print Exception
接下来,我没有unserstand是行:
ex.coef = ( a, b, c )
那是什么? 是一个命令吗?它有用吗?
谢谢你们! :)
答案 0 :(得分:1)
以下是从Exception
派生的类的定义,也称为它的子类。它的主体是空的(它没有向基类添加新行为或属性),因此使用语句pass
,因为类主体必须包含其中的某些内容。
class QuadError(Exception):
pass
在这部分代码中:
ex = QuadError( "Not Quadratic" )
ex.coef = ( a, b, c )
raise ex
它正在创建新类的实例并向其传递一个字符串,该字符串将成为异常的message
属性,并在打印异常时显示。 ex.coef
赋值添加该名称的属性,其值为系数值的元组。这本身并不是很有用,但是其他代码可能会尝试访问添加的属性并以某种方式使用这些值。但是,在您的代码中没有这样做的例子。
在我的选项中,最好将系数值添加到例外消息本身,以便它们与一个一起打印。
这就是我的意思:
a, b, c = 0, 1, 2
try:
ex = QuadError("Not Quadratic: coefficients a:{} b:{} c:{}".format(a,b,c))
raise ex
except QuadError as qe:
print(qe)
输出:
Not Quadratic: coefficients a:0 b:1 c:2