1、try ... except ...

我们可以使用try..except语句来处理异常。我们把通常的语句放在try-块中,而把我们的错误处理语句放在except-块中。

当试图读入一个用户输入时,用户按下了Ctrl + d,Python会跑出异常

 

>>> try:
	s = input('请输入一个字符串:')
except EOFError:
	print('\nEOFError异常处理:用户输入过程产生异常')

python中eof错误 eof error python_异常处理

 

当以只读的方式打开一个不存在文件的时候会跑出IOError异常:因此:

#尝试以只读的方式打开一个不存在的文件,并进行异常处理
try:
    fp = open('file.txt','r')
except IOError:
    print("异常处理:打开文件file.txt失败")

 

#尝试以写入的方式打开一个不存在的文件,并进行异常处理
try:
    fp = open('file.txt','w')
    #打印一个没有定义的变量,跑出NameError异常
    print(name)     
except IOError:
    print("异常处理:打开文件file.txt失败")
except NameError:
    print('异常处理:变量name没有定义')
    #在捕获的异常中处理
    name = 'jiezhj'
    #写入一行 
    fp.write(name + '\n')
    fp.write(name)
    fp.write(name)
    fp.write(name)
    fp.close()

 

 

异常的抛出机制:

1、如果在运行时发生异常,解释器会查找相应的处理语句(称为handler).

2、要是在当前函数里没有找到的话,它会将异常传递给上层的调用函数,看看那里能不能处理。

3、如果在最外层(全局“main”)还是没有找到的话,解释器就会退出,同时打印出traceback以便让用户找到错误产生的原因。



#FileName : except.py

#定义一个方法用于打开文件
def func(FileName):
    try:
        #以只读的方式打开文件FileName
        fp = open(FileName,'r')
    except NameError:
        print('异常处理:函数内部异常')
    except IOError:
        print('func异常处理:文件hello.txt打开错误!')

#定义一个方法用于调用方法func
def callFunc():
    try:
        #传递文件名
        func('hello.txt')
    except IOError:
        print('callFunc异常处理:文件hello.txt打开错误!')
        
callFunc()

异常被func方法中的except截获:

python中eof错误 eof error python_调用方法_02

 

将方法func中的异常处理注释掉之后,异常会向调用方法func的函数中抛出

#FileName : except.py

#定义一个方法用于打开文件
def func(FileName):
    try:
        #以只读的方式打开文件FileName
        fp = open(FileName,'r')
    except NameError:
        print('异常处理:函数内部异常')
    #将fun中的异常处理注释掉
#    except IOError:
#        print('func异常处理:文件hello.txt打开错误!')

#定义一个方法用于调用方法func
def callFunc():
    try:
        #传递文件名
        func('hello.txt')
    except IOError:
        print('callFunc异常处理:文件hello.txt打开错误!')
        
callFunc()

python中eof错误 eof error python_调用方法_03

 让try..catch块关联上一个else从句。当没有异常发生的时候,else从句将被执行。