【python】异常相关语法汇总:try,except,raise,assert
需要继承Exception类# ⾃定义异常类,继承Exception# 设置抛出异常的描述信息return f'您输⼊的⻓度是# ⾃定义异常类,继承Exception class ShortInputError(Exception) : def __init__(self , length , min_len) : self . length = length。
·
1 Assert
1.1 含义与用法
给出一个判断条件,如果条件满足,则继续执行;如果条件不满足,则直接报错(AssertionError)
常用于代码调试,更方便地定位出错的位置
例如:
def zero(s):
a = int(s)
assert a > 0,"a超出范围" # 如果a确实大于0,程序正常往下运行(可在判断条件的逗号后添加错误描述)
return a
zero("-2") #但是如果a是小于0的,程序会抛出AssertionError错误,报错为参数内容“a超出范围”
运行结果:
Traceback (most recent call last):
File "e:\Python_list\class_student\temp.py", line 6, in <module>
zero("-2")
File "e:\Python_list\class_student\temp.py", line 3, in zero
assert a > 0,"a超出范围"
AssertionError: a超出范围
注意:
如果写成assert(False, "Error")形式不会报错,但是永不会执行,因为此时判断条件为 (False, "Error"),是一个元组,即只有为空的时候才会返回False。
1.2 assert的启用和禁用
Python解释器在运行时有两种模式:
- 启用: 调试模式,该模式下,内置只读变量__debug__为True。
- 禁用: 优化模式,当使用选项-O运行时,即
python.exe -O demo.py为优化模式,内置只读变量__debug__为False
2 try
2.1 含义与用法
整体由:try…except, else, finally 组成:
# try语句的使用
try:
print("程序正常运行。。。")
except KeyError:
print('key error错误。。。')
else:
print("程序未产生异常时则运行当前代码。。。")
finally:
print("程序无论是否出现异常都执行此语句。。。")
- try:用来估计错误;程序先执行try里的内容
- except:用来捕获异常并执行此部分的程序;try中的代码执行有误时:
- 如果except后没有判断条件,则直接执行except内代码
- 如果有判断条件,且try内出现的错误类型与判断条件出设定的错误类型一致,则执行except内代码,判断条件的设置方式如下:
# 捕获异常的不同情况
try:
print(num)
except NameError: # 只设置捕获一种错误类型的情况
print('有错误')
try:
print(1/0)
except (NameError, ZeroDivisionError): # 设置捕获多种错误类型的情况
print('有错误')
try:
print(num)
except (NameError, ZeroDivisionError) as result: # 捕获异常描述信息(仅用于捕获)
print(result)
try:
print(num)
except Exception as result: # 捕获所有的异常(Exception是所有程序异常类的⽗类)
print(result)
# ---------------多个except的情况---------------
try:
tmp = tmp / 0
print(num) # ⼀般try下⽅只放⼀⾏尝试执⾏的代码,出现异常的语句后,下面的语句不再执行
tmp = tmp + 1
except NameError as e:
print(e)
except ZeroDivisionError as e:
print(e)
except Exception as e:
print(e)
else:
print("I am OK!")
finally:
print("End the program!")
return tmp
- else:如果没有被捕获的异常,则执行else中的代码
- finally:无论是否异常,都必执行的代码(例如
f.close())
2.2 raise的用法
共有三种用法:
- raise
- raise exceptionName
- raise exceptionName (reason)
程序运行到raise后直接抛出一个异常,供相关语句处理或直接停止运行
2.2.1 单独一个raise
- 如果上文没有异常,则触发
RuntimeError - 如果上文已经有异常了,则重新触发前一个异常,如果之前没有触发异常,触发RuntimeError
def test(num):
try:
100/num
except Exception as res:
print("捕获异常完成")
raise
test(0)
2.2.2 raise 异常名
抛出指定类型的异常
def Test1(num):
try:
100/num
except Exception as res:
print("捕获异常完成")
print(res)
raise ZeroDivisionError
print("----在raise之后,不会执行-----")
else:
print("没有异常")
Test1(0)
也可以抛出自定义的异常:
class CustomException(Exception):
def __init__(self,ErrorInfo):
self.ErrorInfo = ErrorInfo
def __str__(self):
return self.ErrorInfo
def Test1(num):
try:
raise CustomException('这是一个自定义的异常')
except CustomException as res:
print(res)
Test1(0)

思考:except可以跟raise一起组合使用:
except负责启动执行包含raise的这一部分代码,并且收集错误的类型,raise负责抛出指定类型的异常。对于异常的处理过程而言,这种逻辑类似于except负责记录,raise负责具体执行。
2.2.3 raise 异常名(描述信息)
def Test1(num):
try:
100/num
except Exception as res:
print("捕获异常完成")
print(res)
raise ZeroDivisionError("分母不能为0")
print("----在raise之后,不会执行-----")
else:
print("没有异常")
Test1(0)

2.3 自定义异常
需要继承Exception类
# ⾃定义异常类,继承Exception
class ShortInputError(Exception):
def __init__(self, length, min_len):
self.length = length
self.min_len = min_len
# 设置抛出异常的描述信息
def __str__(self):
return f'您输⼊的⻓度是{self.length}, 不能少于{self.min_len}个字符'
def main():
try:
con = input('请输⼊密码:')
if len(con) < 3:
raise ShortInputError(len(con), 3)
except Exception as result:
print(result)
else:
print('密码已经输⼊完成')
main()
更多推荐




所有评论(0)