错误包含两种错误,语法错误以及逻辑错误。
语法错误指的就是不按照代码规定写代码,逻辑错误指的是编程逻辑上出现错误,比如1/0这样的错误。异常处理实际上就是程序运行时发生错误的信号。
异常处理是什么?
捕捉到发生错误的代码,为其执行特定的逻辑,这就是异常处理
异常的组成有哪些?
为什么要去处理异常?
异常触发后没有被处理的情况下,程序就会在当前异常处终止,后边的代码就不会运行,必须提供一种异常处理机制增强程序的健壮性和容错性。
如何进行异常处理?
异常是由于错误引发的,语法上的错误与异常处理无关,必须在程序运行前就进行修正。
一、用if进行判断
__author__ = 'iCake'
age = input(">>: ")
if age.isdigit(): # 用户输入为数字
int(age) # 主逻辑
elif age.isspace(): # 用户输入为空格
print("用户输入为空格")
elif len(age) == 0: # 用户输入为空
print("用户输入的为空")
else: # 用户输入为其他
print("非法输入")
结论:如果有十段程序,就要不断的去复制代码,导致程序可读性非常的差
二、异常处理的基本方式
try:
被检测的代码块
except 异常类型:运行逻辑
__author__ = "iCake"
try:
age = input(">>: ")
int(age)
except ValueError as v_error:
print("v_error")
except KeyError as k_error:
print("k_error")
except IndexError as in_error:
print("In_error")
异常实质上就是一个类,基本的异常有:
AttributeError | 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x |
IOError | 输入/输出异常;基本上是无法打开文件 |
ImportError | 无法引入模块或包;基本上是路径问题或名称错误 |
IndentationError | 语法错误(的子类) ; 代码没有正确对齐 |
IndexError | 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] |
KeyError | 试图访问字典里不存在的键 |
KeyboardInterrupt | Ctr1+c被按下 |
SyntaxError | 代码非法,语法错误 |
NameError | 使用一一个 还未被赋予对象的变量 |
TypeError | 传入对象类型与要求的不符合 |
UnboundLocalError | 试图访问一个还未被设置的局部变量,基本上是由于另有一一个同名的全局变量,导致你以为正在访问它 |
ValueError | 传入一个调用者不期望的值,即使值的类型是正确的 |
万能异常:
except Exception: # 万能异常
print("error")
三、异常的其他结构
__author__ = "iCake"
try:
age = input(">>: ")
int(age)
except ValueError as error:
print("这是错误", error)
except KeyError as k_error:
print(k_error)
except IndexError as k_error:
print("In_error")
except Exception: # 万能异常
print("error")
else:
print("try中没有异常才会执行else")
finally:
print("无论是否有异常,都会执行的模块") # 执行清理工作
断言:
关键字 assert
__author__ = 'iCake'
a = 1
assert a == 2
assert a == 1
错误类型会是断言错误
什么时候用异常处理呢?
应该尽量少用,与你主要的工作没有关系,在一些异常无法预知的时候才能使用try except