在Python中引发异常

2024-10-01 02:35:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我在读我的电子图书:

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 root”错误,或者quad(0,b,c) 但是我不明白程序本身是如何工作的。。。 所以

^{pr2}$

名为“ex”的变量获取值:quaderError(“Not Quadratic”) 所以程序会搜索包含pass命令的quaderor类???!那它为什么要打印消息???我希望有类似。。。在

class QuadError( Exception ):
    print Exception

下一件事我没看穿的是那句台词:

ex.coef = ( a, b, c )

那是什么??? coef是命令吗?它有什么作用吗?在

谢谢各位!:)


Tags: noifexceptionnotmathpassrealclass
1条回答
网友
1楼 · 发布于 2024-10-01 02:35:05

下面是从Exception派生的类的定义,也称为它的子类。它的主体是空的(它没有向基类添加新的行为或属性),因此使用pass语句,因为类主体中必须包含某些内容。在

class QuadError(Exception):
    pass

在本部分代码中:

^{pr2}$

它正在创建新类的一个实例,并向它传递一个字符串,该字符串将成为异常的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

相关问题 更多 >