标签:str 使用 期望 python 同名 boa 常用 try 没有
程序中的错误分为两种:语法错误和逻辑错误
语法错误:
if
#------------------
print(haha
逻辑错误:
#用户输入不完整(比如输入为空)或者输入非法(输入不是数字)
num=input(">>: ")
int(num)
什么是异常:代码发生异常错误之后,你的程序就中断了
什么是异常处理:当代码出现异常时,我通过某种方式不让你程序中断,合理的跳出去,叫做异常处理
为什么要有异常处理?用户体验良好,使你的代码更有健壮性容错性
异常处理的两种方式:
if判断式
总结:
1.if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要写重复的if来进行处理。
2.在你的程序中频繁的写与程序本身无关,与异常处理有关的if,会使得你的代码可读性极其的差
3.if是可以解决异常的,只是存在1,2的问题,所以,千万不要妄下定论if不能用来异常处理。
python专有异常处理
python:为每一种异常定制了一个类型,然后提供了一种特定的语法结构用来进行异常处理
错误举例:
# 触发IndexError
l=['egon','aa']
l[3]
# 触发KeyError
dic={'name':'egon'}
dic['age']
#触发ValueError
s='hello'
int(s)
常用异常:
AttributeError #试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError #输入/输出异常;基本上是无法打开文件
ImportError #无法引入模块或包;基本上是路径问题或名称错误
IndentationError #语法错误(的子类) ;代码没有正确对齐
IndexError #下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError #试图访问字典里不存在的键
KeyboardInterrupt #Ctrl+C被按下
NameError #使用一个还未被赋予对象的变量
SyntaxError #Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError #传入对象类型与要求的不符合
UnboundLocalError #试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError #传入一个调用者不期望的值,即使值的类型是正确的
单分支捕获异常:
#基本语法:
try:
被检测的代码块
except 异常类型:
try 一旦检测异常,就执行这个位置的逻辑
try:
num=int(input("----"))#出现ValueError错误之后,直接跳转到except语句
dic={'name':"嘉欣"}
print(dic['age'])
except ValueError:
print(66)
多分支捕获异常
try:
num=int(input("----"))#出现ValueError错误之后,直接跳传到except语句
dic={'name':'加薪'}
print(dic['age'])
l1=[1,2]
print(l1[100])
print(11)
except ValueError:
print('输入有非数字元素')
except KeyError:
print('没有此键')
except IndexError:
print('没有此下标')
print(666)
万能异常捕获:处理所有python识别的异常
try:
dic={'name':'嘉欣'}
l1=[1,2]
print(l1[100])
print(111)
for i in 123:
pass
except Exception as e:
print(e)
print(666)
什么时候用万能?什么时候用多分支?:如果你对错误信息不关心,只是想要派出错误让程序继续运行,就用万能异常 你对错误信息要进行明确的分流,让你的程序多元化开发
多分支+万能异常
def func():
pass
def func1():
pass
dic = {
1: func,
2: func1,
}
try:
num = int(input('请输入序号'))
dic[num]()
except ValueError:
print('请输入数字')
except KeyError:
print('请输入范围内的序号')
except Exception:
print('程序出现意料之外的错误....')
try.....else......finally
try:
dic = {'name': '嘉欣'}
print(dic['age'])
l1 = [1, 2]
print(l1[100])
print(111)
except KeyError:
print('没有此键')
except IndexError:
print('没有此下标')
else:
print('如果没有出现异常则执行这里')
finally:
print('finally 666')
#except必须依赖于try,else必须依赖于except和try
#finally只是依赖于try
#当没有异常执行else finally 有异常则执行异常 和finally
#finally 用在关闭数据库连接,文件句柄关闭,数据保存等,用到finally
主动触发异常
class A:
def func(self):
raise Exception("使用父类方法")
class B(A):
def func(self):
print("in B func")
class C(A):
def func(self):
print("in C func")
class D(A):
def func1(self):
print("in D func1")
def function(obj):
obj.func()
obj1 = D()
function(obj1)
# 结果:
Exception: 使用父类方法
断言:展现一种强硬的态度
name="alex"
n1=input("请输入")
assert name=n1
print(11)
print(22)
自定义异常
python中提供的错误类型很多种,但是不是全部的错误
class LiYeError(BaseException):
def __init__(self,msg):
self.msg=msg
def __str__(self):
return self.msg
try:
# 三行
raise LiYeError('socket.connent.....')
except LiYeError as e: # e = LiYeError('类型错误')
print(e)
try...except的方式比较if的方式的好处
标签:str 使用 期望 python 同名 boa 常用 try 没有
原文地址:https://www.cnblogs.com/zhangdadayou/p/11415380.html