异常:在运行代码构成中遇到的任何错误,带有error字样的,都是异常
异常处理:对代码中所有出现的异常进行处理
1.疑问:为什么要进行异常处理?
python用异常对象(exception object)来表示异常情况,遇到错误后,会引发异常,如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。
- 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
- 一般情况下,在Python无法正常处理程序时就会发生一个异常。
- 异常是Python对象,表示一个错误。
- 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
2.异常处理
2.1.try/except
异常捕捉可以使用 try/except 语句。
(初级的异常处理:抓 1.处理某个错误 2.处理某种类型的错误 3.有错就抓)
try 语句按照如下方式工作;
-
首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。
-
如果没有异常发生,忽略 except 子句,try 子句执行后结束。
-
如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。
-
如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中。
一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
处理程序将只针对对应的 try 子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。
一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组
import os
#1
try: #可比喻为警察
os.mkdir('huan_huan') #可比喻成嫌疑人
except FileExistsError: #出动警力
print('抓捕归案,等待进一步处理') #抓捕归案
#2
try: #可比喻为警察
os.mkdir('huan_huan') #可比喻成嫌疑人
except OSError: #出动警力
print('抓捕归案,等待进一步处理') #抓捕归案
#备注:说明FileExistsError错误类型属于OSError
#3
try: #可比喻为警察
os.mkdir('huan_huan') #可比喻成嫌疑人
#有错就抓
except Exception: #出动警力
# except: # 出动警力
print('抓捕归案,等待进一步处理') #抓捕归案
import os
try: #可比喻为警察
os.mkdir('huan_huan') #可比喻成嫌疑人
except (FileExistsError,OSError,NameError): #出动警力
print('抓捕归案,等待进一步处理') #抓捕归案
2.2.try/except...else
(真正的异常处理:既要抓,还要有处罚措施)
try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。
else 子句将在 try 子句没有发生任何异常的时候执行。
import os
try: #可比喻为警察
os.mkdir('huan_huan') #可比喻成嫌疑人
#有错就抓
except Exception as e: #报错误抓起来,存储到变量C里面去
# except: # 出动警力
print('抓捕归案,等待进一步处理') #抓捕归案
print('犯的错误是:{0}'.format(e))
#将错误记起来,新建文件
# a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写
file=open('error.text','a+',encoding='utf-8')
file.write(str(e))
# close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。 close() 方法允许调用多次。
file.close() #关闭文件
else: #跟try下面的的代码是一起的,有错不运行else后面的代码
print('测试缓缓')
另:
close()方法的使用:
File close() 方法 概述 close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。 close() 方法允许调用多次。 当 file 对象,被引用到操作另外一个文件时,Python 会自动关闭之前的 file 对象。 使用 close() 方法关闭文件是一个好的习惯。 语法 close() 方法语法如下: fileObject.close(); 参数 无 返回值 该方法没有返回值。
2.3.try-finally 语句
try-finally 语句无论是否发生异常都将执行最后的代码。
import os
try: #可比喻为警察
os.mkdir('huan_huan') #可比喻成嫌疑人
#有错就抓
except Exception as e: #报错误抓起来,存储到变量C里面去
# except: # 出动警力
print('抓捕归案,等待进一步处理') #抓捕归案
print('犯的错误是:{0}'.format(e))
#将错误记起来,新建文件
# a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写
file=open('error.text','a+',encoding='utf-8')
file.write(str(e))
# close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。 close() 方法允许调用多次。
file.close() #关闭文件
finally: #不管有没有错,都要执行
print('测试缓缓')