在 Python 中引发异常
Raising exceptions in 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)
虽然我理解 try...except thing inside a function,但我无法理解这个...
我了解它的作用,例如我使用了 quad(4, 2, 4) 给我一个 "No Real Roots" 错误,或者 quad(0, b, c)
但是我不明白程序本身是如何工作的......
所以,
if a == 0:
名称为"ex"的变量,获取值:QuadError("Not Quadratic")
所以程序会搜索其中包含 pass 命令的 Class QuadError???!那它为什么打印消息???我希望像...
class QuadError( Exception ):
print Exception
接下来我不明白的是:
ex.coef = ( a, b, c )
那是什么???
coef 是命令吗?它有作用吗?
谢谢大家! :)
下面是从Exception
导出的class的定义,也称为它的子class。它的主体是空的(它没有向基础 class 添加新的行为或属性),因此使用语句 pass
因为 class 主体必须包含一些东西。
class QuadError(Exception):
pass
这部分代码:
ex = QuadError( "Not Quadratic" )
ex.coef = ( a, b, c )
raise ex
它正在创建新 class 的一个实例并向其传递一个字符串,该字符串将成为异常的 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
我正在阅读一本电子书,这是我的代码:
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 thing inside a function,但我无法理解这个... 我了解它的作用,例如我使用了 quad(4, 2, 4) 给我一个 "No Real Roots" 错误,或者 quad(0, b, c) 但是我不明白程序本身是如何工作的...... 所以,
if a == 0:
名称为"ex"的变量,获取值:QuadError("Not Quadratic") 所以程序会搜索其中包含 pass 命令的 Class QuadError???!那它为什么打印消息???我希望像...
class QuadError( Exception ):
print Exception
接下来我不明白的是:
ex.coef = ( a, b, c )
那是什么??? coef 是命令吗?它有作用吗?
谢谢大家! :)
下面是从Exception
导出的class的定义,也称为它的子class。它的主体是空的(它没有向基础 class 添加新的行为或属性),因此使用语句 pass
因为 class 主体必须包含一些东西。
class QuadError(Exception):
pass
这部分代码:
ex = QuadError( "Not Quadratic" )
ex.coef = ( a, b, c )
raise ex
它正在创建新 class 的一个实例并向其传递一个字符串,该字符串将成为异常的 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