异常的语法:
try: # try下面的语句块执行出现异常,才会执行except下面的语句块 .... except: ....
try: # <name>表示异常名,我们可以指定出现什么异常就执行什么样的语句块,可以有多个except进行匹配 .... except <name>: ....
try: # e 表示异常的详细信息,我们可以通过 print(e) 来查看异常的信息 .... except <name>, e: print(e)
try: # 无论 try 下面的语句块执行是否正常,都会执行 finally 下面的语句块 .... except: .... finally: ....
try: # 只有 try 下面的语句块执行正常,才会执行 else 下面的语句块 .... except: .... else: .... finally: ....
例子:
import sys import time try: time.sleep(60) except KeyboardInterrupt: print("User Press Ctrl+C, Exit") sys.exit()
常见的异常:
SyntaxError | 语法错误 |
IndexError | 索引超出序列范围 |
KeyError | 请求一个不存在的字典关键字 |
NameError | 尝试访问一个没有声明的变量 |
IndentationError | 缩进错误,即代码没有正确对齐 |
ImportError | 无法引入模块或包,可能路径不存在 |
IOError | 输入输出错误,比如你要读的文件不存在 |
UnboundLocalError | 试图访问一个还未被设置的局部变量,例子 |
ValueError | 传给函数的参数类型不正确,比如给int()函数传入字符串 |
AttributeError | 尝试访问未知的对象属性,比如 os.path.abcd() 中是没有 abcd() 这个函数的 |
KeyboardInterrupt | 键盘中断,即我们按 Ctrl + C 就会出现这个异常 |
如何自定义异常:
#!/usr/bin/env python #-*- coding:utf-8 -*- class ShortError(Exception): # 必须用类来自定义异常,且要继承Exception这个异常 def __str__(self): return "your password is too short, please input again." try: password = raw_input("Please input your password: ") if len(password) <= 3: raise ShortError() # 如果密码长度小于3,就抛出 ShortError 这个异常,下面的 except 捕获这个异常,最终决定要做什么 except ShortError, e: print(e)