首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中引发异常

在Python中引发异常
EN

Stack Overflow用户
提问于 2015-01-29 18:29:28
回答 1查看 285关注 0票数 1

我正在读一本电子书,这是我的代码:

代码语言:javascript
复制
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)

虽然我理解尝试..。除了函数里面的东西,我不明白.我理解它的作用,例如我使用了四(4,2,4)给我一个“没有真实根”的错误,或者四(0,b,c)但是我无法理解程序本身是如何工作的…所以,

代码语言:javascript
复制
if a == 0:

名为"ex“的变量获取值: QuadError(”非二次“),因此程序搜索包含pass命令的类QuadError?!那为什么要打印这条信息?我希望像..。

代码语言:javascript
复制
class QuadError( Exception ):
    print Exception

接下来我要说的是台词:

代码语言:javascript
复制
ex.coef = ( a, b, c )

那是什么?coef是命令吗?它能起什么作用吗?

谢谢各位!)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-29 19:17:23

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

代码语言:javascript
复制
class QuadError(Exception):
    pass

在守则的这一部分:

代码语言:javascript
复制
ex = QuadError( "Not Quadratic" )
ex.coef = ( a, b, c )
raise ex

它正在创建一个新类的实例,并向它传递一个字符串,该字符串将成为异常的message属性,并在打印异常时显示。ex.coef赋值添加该名称的属性,该属性的值与系数值为元组。这本身并不十分有用,但是其他代码可以尝试访问添加的属性并以某种方式使用这些值。但是,在代码中没有这样做的例子。

在我的选项中,最好将系数值添加到异常消息本身,以便将它们与一个一起打印。

这就是我的意思:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
Not Quadratic: coefficients a:0 b:1 c:2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28221946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档