除了在Python中真正做到了什么?

时间:2013-04-13 00:11:23

标签: python exception

我是Python的新手,并且没有异常经验,但是我已经阅读了所有文档但找不到答案......所以我正在寻找更深入的视图,除了语义。 当我们有例如:

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

在这种情况下,我希望打印消息。当输入的值大于1时,是否有一种方法可以定义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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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除了不会自动检查它之间的整个代码,它只是查找异常......或者更具体地说,它会查找您告诉它要查找的异常。

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

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

有关详细信息,请参阅: http://docs.python.org/2/tutorial/errors.html