python异常以及面向对象编程
一、面向对象
需要注意的是,在Python中,变量名类似__xxx__
的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name__
、__score__
这样的变量名。
有些时候,你会看到以一个下划线开头的实例变量名,比如_name
,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。
双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name
是因为Python解释器对外把__name
变量改成了_Student__name
,所以,仍然可以通过_Student__name
来访问__name
变量:
二、python异常处理
1、try-except异常处理
代码块如下:
try: try_code except NameError,e: except_code finally: always run code.
2、with as异常处理
with open('q.txt') as f: for line in f.readlines(): print line
3、python常见异常
(均继承自Exception基类)
3-1、NameError:变量a未定义
3-2、SyntaxError:语法错误,if True(没加:)
3-3、IOError:f = open('1.txt'):文件不存在
3-4、ZeroDivisionError:10/0
3-5、ValueError:a=int('dd')
4、raise语句和assert语句
4-1raise用于主动抛出异常
语法:
raise exception,args
exception:异常类 args:描述异常的元组
例如 raise NameError, "Not defined"
输出 NameError: Not definied
4-2assert语句
断言语句:用于检测表达式是否为真,如果是假,引发AssertionError错误。
语法: assert expression,args
expression:表达式
args:判断条件的描述信息
举例: assert 0,'test assert'或者assert 0==9,'test assert'
输出AssertionError: test assert
5、标准异常和自定义异常
自定义异常必须继承自Exception类,而且只能是主动触发(raise)
举例说明
自定义异常:
class FileError(IOerror):
pass
产生自定义异常:
raise FlieError, 'file error'
try捕获异常的使用:
try: raise FileError,'file error' except FileError,e: print e