最近正在自学python,看的是简明python教程。
现在学到13章,引发异常。在关于raise语句的用法上。我有些困惑,在此寻心求教。
代码如下
#!/usr/bin/python # Filename: raising.py class ShortInputException(Exception): '''A user-defined exception class.''' def __init__(self, length, atleast): Exception.__init__(self) self.length = length self.atleast = atleast try: s = raw_input('Enter something --> ') if len(s) < 3: raise ShortInputException(len(s), 3) # Other work can continue as usual here except EOFError: print '\nWhy did you do an EOF on me?' except ShortInputException, x: print 'ShortInputException: The input was of length %d, \ was expecting at least %d' % (x.length, x.atleast) else: print 'No exception was raised.'
困惑1:
try: s = raw_input('Enter something --> ') if len(s) < 3: raise ShortInputException(len(s), 3)
在这里raise模块里的ShortInputException类为什么用到len(s)和3 这2个值呢?这2个值在这里的意思我能猜明白,但是不能理解他们存在这里的意义,能告诉我他们运用在这里的意思么?前面代码创建类时的ShortInputException(Exception):跟这里的关系是什么呢?想了很久没想出来,我大概是掉进一个误区里去了。
困惑2:
except ShortInputException, x: print 'ShortInputException: The input was of length %d, \ was expecting at least %d' % (x.length, x.atleast)
这里的x又指的是什么呢?他是在给ShortInputException(Exception)赋值吗?那前面怎么没有关于x的定义和说明呢?
在此之前我只接触过用class创建默认值的类,综合上面这2个问题,请问我实在创建类方面需要多加理解和努力么?
这些我都能猜出他们形式上表达出来的模样,但是不懂得他们逻辑上的意思。
这些问题想了很久还是不理解,望得到解答。谢谢。
一、raise 作为一个抛出异常的语句,在你的例子中,raise抛出一个ShortInputException异常,这里指的是抛出一个ShortInputException实例,所以len(s)和2就是作为实例化的参数。
二、
x其实就是shortInputException的实例,你可以通过尝试一下:
下面是一段摘抄至《python核心编程》的一段raise的用法,希望对你有帮助!