>> 异常
1.定义语法
try:
# 执行代码块(可能存在异常)
except ExceptionName1,...,ExceptionNamen:
# 发生异常处理的代码
else:
# 没有发生异常会处理的代码
finally:
# 不管是否有异常都会执行的代码块
常用:
try:
# 代码片段
except:
# 异常执行代码
2.手动抛出异常
raise ExceptionName(args)
raise ZeroDivisionError("除数为0")
3.使用traceback模块打印异常信息
导入模块:
import traceback
异常模块打印日志:
print(traceback.format_exc())
>> 断言(assert)
1.定义语法
assert 条件[,提示信息]
条件=True,断言通过:不会抛出AssertionError异常,执行提示语;
条件=False,断言不通过:会抛出AssertionError异常,执行提示语
num2 = 0
assert num2 != 0, "除数不能为0"
>> 代码示例
# python中的异常 import traceback def func_division(num1, num2): """ 计算除法函数 :param num1: 被除数 :param num2: 除数 :return: 商 """ try: result = num1 / num2 except ZeroDivisionError: # 指定异常类型,使用traceback模块打印异常信息 print(traceback.format_exc()) except Exception as e: # 抛出非指定的异常时执行 print(e.args) else: # 没有异常时执行(可选模块) print("no problem!!!,result={0}".format(result)) return result finally: # 不管有没有异常都会执行(可选模块) print("always execute!!!") # return 3 (如果finally中有return,那么会先返回出去不会返回其他的return,一般不建议添加return) def func_division2(num1, num2): """ 计算除法函数 :param num1: 被除数 :param num2: 除数 :return: 商 """ # assert num2 != 0, "除数不能为0" if num2 == 0: raise ZeroDivisionError("除数为0") return num1 / num2 if __name__ == "__main__": print(func_division(4,2))
>> 自定义异常
python中自定义异常类需要直接或间接的继承Exception类,建议异常类命名一般都是以“Error”后缀,如:MyException1Error
>> 自定义异常代码示例
# python中的自定义异常 import traceback class MyException1Error(Exception): def __init__(self,msg): self.msg = msg def func_method(): num = input("请输入数字:") if not num.isdigit(): raise MyException1Error("NOT A NUMBER!!!") else: print("输入正确,输入的是:" + num) if __name__ == "__main__": try: func_method() except MyException1Error: print(traceback.format_exc())
原文:https://www.cnblogs.com/jason2018524/p/13049275.html