您的位置:首页 > 编程语言 > Python开发

不要嫌我啰嗦~继续话痨python

2015-10-21 16:24 806 查看
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今天就到这里啦~~~兔几要去蹦哒一会儿了~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: