gpt4 book ai didi

python - 在 Python 中引发异常

转载 作者:太空宇宙 更新时间:2023-11-03 17:57:57 25 4
gpt4 key购买 nike

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

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)

虽然我理解了 try... except 函数内部的东西,但我无法理解这个...我理解它的作用,例如我使用了quad(4,2,4),它给了我一个“无实根”错误,或者quad(0,b,c)但是我无法理解程序本身是如何工作的......所以,

if a == 0:

名称为“ex”的变量,获取值:QuadError(“Not Quadratic”)所以程序会搜索包含 pass 命令的 QuadError 类???!那为什么它会打印消息???我期望像...

class QuadError( Exception ):
print Exception

接下来我不明白的是这一行:

ex.coef = ( a, b, c )

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

谢谢大家! :)

最佳答案

以下是从 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

关于python - 在 Python 中引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28221946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com