1

我真的是 Python 的新手,对异常没有经验,但我已经阅读了所有文档,但找不到答案……所以我正在寻找更深层次的 except 语义。例如,当我们有:

try:
    x = 2
except GreaterThanOne:
    print("The value is greater than one")

在这种情况下,我希望打印消息。当输入的值大于一时,有没有办法定义 GreaterThanOne 类(异常)?


好吧,让我更具体一点...

每个错误都由应该添加到错误属性中的特定规则引发,对吗?例如:

try:
    myvalue = x / y
except ZeroDivisionError:
    print("Some error message printed ...")

因此,当我使用此代码并将 y 输入为 0 时,将引发异常 ZeroDivisionError ...我可以重新定义 ZeroDivisionError 以像这样引发,但如果 y 设置为 ... 2 或 3 或任何其他值?

输入:

x = 10
y = 2
try:
    myvalue = x / y
except ZeroDivisionError:
    print("division by 2")

输出:division by 2

4

2 回答 2

5

这是一个可以帮助您理解的示例。在您的 Python 解释器中运行它,并观察在您调用set_val(2).

# Defining our Exception subclass:
class GreaterThanOne(Exception):
    pass

# The global value we pretend to care about:
val = 0

# Function to set a value but possibly raise our new Exception 
def set_val(new_val):
    if new_val > 1:
        raise GreaterThanOne("%d > 1" % new_val)
    val = new_val

# Catching exception:
try:
    set_val(0)
    set_val(1)
    set_val(2)
except GreaterThanOne:
    print "Whoops - one of those values was greater than one"

# Not catching exception:
set_val(0)
set_val(1)
set_val(2)
set_val(3)
于 2013-04-13T00:14:44.083 回答
0

try-except 块在此块中捕获异常。

try:
    #some stuff here
except ExceptionClass as e:
    #Exception handling here

except 关键字后面的类表示要捕获哪种异常。通常你会给出一个特定的类,比如 ValueError 或 KeyError。您还可以使用 Exception 类来捕获任何异常。因为所有其他异常类都继承自 Exception。

因此,如果您想使用此构造,则需要通过调用的函数/方法引发异常,或者使用 raise 关键字自己引发异常。

像这样:

try:
    raise KeyError('Just for test')
except KeyError as e:
    #Exception handling here

try except 不会自动检查它之间的整个代码,它只是查找异常......或者更具体地说,它查找您告诉它查找的那些异常。

当然你也可以检查异常实例。

try:
    raise KeyError('Just for test')
except KeyError as e:
    print e.args

更多信息,请参见: http ://docs.python.org/2/tutorial/errors.html

于 2013-04-13T01:29:37.333 回答