python的类支持多继承喔~
不过除非你十分熟悉多继承,否则应该尽量避免使用,因为据说会出现不可预见的麻烦。
多重继承的使用有一个需要特别注意的地方:如果一个方法从多个超类继承,那么必须注意一下超类的顺序,先继承的类会重写后继承滴类的方法。
好啦,类的东西先说到这里啦,下面说一说python的异常:
比嘟比嘟比嘟~
下面是一些重要的内建异常类:
Exception 所有异常的基类
AttributeError 特征引用或赋值失败时引发
IOError 试图打开不存在文件时引发
IndexError 使用序列中不存在的索引
KeyError 使用映射中不存在的键
NameError 找不到名字(变量)
SyntaxError 代码为错误形式
TypeError 内建操作或者函数应用于错误类型的对象
ValueError 内建操作或者函数应用于正确类型的对象,但是该对象使用不合适的值
ZeroDivisionError 除法或者模除的第二个参数为零
下面看一段捕捉一场的代码:
#catch exceptions:
try:
x = input('Enter the first Number:')
y = input('Enter the second Number:')
print x/y
except ZeroDivisionError:
print 'Error~Error~Error,the second number cant be zero!!!!!!!!!!'
这样捕捉异常可以使得在用户错误操作时,程序输出一些比较友好的信息
import exceptions
print dir(exceptions)#show all exceptions
这样可以输出系统中支持的所有异常:
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFError', 'EnvironmentError', 'Exception', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__doc__', '__name__', '__package__']
哇好多喔~~~~~~
下面是一个用类来实现的捕捉一样,可以通过类的属性,控制异常是否被捕捉:
#a new class for exception
class MuffledCalculator:
muffled = False
def calc(self, expr):
try:
return eval(expr)
except ZeroDivisionError:
if self.muffled:
print "Division by zero is illegal"
else:
raise
c = MuffledCalculator()
print c.calc('10/5')
c.muffled = True
print c.calc('10/0')
c.muffled = False
print c.calc('10/0')
print "Done!Tada!!"
结果:
2
Division by zero is illegal
None
Traceback (most recent call last):
File "Desktop/python猎人.spy/test.py", line 21, in <module>
print c.calc('10/0')
File "Desktop/python猎人.spy/test.py", line 7, in calc
return eval(expr)
File "<string>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
还可以捕捉多个异常:
#catch exceptions:
try:
x = input('Enter the first Number:')
y = input('Enter the second Number:')
print x/y
except ZeroDivisionError:
print 'Error~Error~Error,the second number cant be zero!!!!!!!!!!'
except TypeError:
print 'that wasnt a number,was it?'
下面这个方式,可以不妨碍程序继续运行,而且可以记录下错误:
#catch exceptions:
try:
x = input('Enter the first Number:')
y = input('Enter the second Number:')
print x/y
except (ZeroDivisionError,TypeError),e:
print e
真正的全捕捉和else语句:
#catch exceptions:
try:
x = input('Enter the first Number:')
y = input('Enter the second Number:')
print x/y
except :
print "something wrong"
else:
print 'well well'
如果一切正常,木有异常出现,那么就会执行else语句的内容。
全捕捉的做法其实很危险,因为这样会隐藏程序员未想到并且木有做好准备处理的错误。
另外,还有finally可用,finally子句一定会被执行,不管有木有异常发生,该子句可以用来关闭文件或者网络套接字:
#catch exceptions:
try:
x = input('Enter the first Number:')
y = input('Enter the second Number:')
print x/y
except (Exception),e:
print "something wrong:",e
else:
print 'well well,every thing seems allright'
finally:
print 'ok good night'
据说,使用try/except语句比使用if/else语句更“python化“一些~
ok今天就到这里啦~~~兔几要去蹦哒一会儿了~~~