python异常
异常
假设有复制文件的需求:
try:
copyFile("path1","path2")
except:
print("Error")
如果使用异常处理,上面的过程中哪怕出现问题,程序也不会因为这些异常被迫终止,即只影响异常的代码段而不影响其他过程的运行。

从除0的异常开始
众所周知,除零是会出错的:
a = 1/0

因此我们需要在可能出现这样的代码段加入异常处理:
try:
a = 3/0 # 这里写可能除0的逻辑运算代码段
except:
print("ZeroDivisionError: division by zero")
这样在try里面出错的时候会直接跳转到except
try...单个except结构
try:
可能发生异常的语句块
except BaseException [as e]:
异常语句处理块
异常处理时会跳过异常的代码到try底部所有的代码段:
try:
print("stp1")
a = 3/0 # 异常发生的语句
print("stp2")
except BaseException as e:
print("stp3")
print(e)
print("stp4")

except中的语句是可以省略的:
try:
print("stp1")
a = 3/0 # 异常发生的语句
print("stp2")
except BaseException as e:
pass # pass
print("stp4")

try...多个except结构
一般结构为
try:
可能发生异常的语句块
except Exception1: # 异常类型1的处理办法
语句
except Exception2: # 异常类型2的处理办法
语句
except BaseException [as e]: # 最后加上可能没考虑到的异常
异常语句处理块
下面的一个输入计算程序,为了应对不同的错误,给予了不同的处理方法
try:
a = input("输入一个被除数")
b = input("输入一个除数")
c = float(a) / float(b)
print(c)
except ZeroDivisionError:
print("除零错误")
except ValueError: # 输了个不是数字的字符串
print("不能将字符串转化为数字")
except NameError: # 使用未定义变量
print("变量不存在")
except BaseException as e:
print(e)
异常里面还有else和final语句,else可能用得上,final大概是不会用了。
try:
b = int(input("输入一个数字")) # 假设不会报错
a = 3/b
except BaseException as e:
print(e)
else:
print("正常执行完了")
常见的异常汇总



traceback
可以导入traceback模块打印详细异常信息
import traceback
try:
print("stp1")
num = 1/0
except:
traceback.print_exc()
'''下面是保存到文件中的操作'''
import traceback
try:
print("stp1")
num = 1/0
except:
with open("path","a") as f:
traceback.print_exc(file=f)

自定义异常类
class AgeError(Exception): # 继承Exception
def __init__(self,errorInfo):
Exception.__init__(self)
self.errorInfo = errorInfo
def __str__(self):
return str(self.errorInfo) + ",年龄错误"
if __name__ == "__main__":
age = int(input())
if age<1 or age>150:
raise AgeError(age) # 抛出异常
else:
print("正常的年龄")

浙公网安备 33010602011771号