我是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
答案 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
所以如果你想使用这个结构,需要引发一个异常,或者你调用的函数/方法,或者你自己用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