try...一个except结构
python
try:
被监控的可能引发异常的语句块
except BaseException [as e]:
异常处理语句块
- try块包含着可能引发异常的代码,except块则用来捕捉和处理发生的异常。
- 执行的时候,如果 try 块中没有引发异常,则跳过 ecept 块继续执行后续代码;
- 执行的时候,如果 try 块中发生了异常,则跳过 try 块中的后续代码,跳到相应的 except 块中处 理异常;异常处理完后,继续执行后续代码。
python
try:
print("step1")
a = 3/0
print("step2")
except BaseException as e:
print("step3")
print(e)
print("step4")
"""
step1
step3
division by zero
step4
"""

【示例】循环输入数字,如果不是数字则处理异常;直到输入 88 ,则结束循环。
python
while True:
try:
num = input("请输入数字...")
print(int(num))
if int(num) == 88:
break
except BaseException as e:
print(e)
try...多个except结构
上面的结构可以捕获所有的异常,但是一般建议尽量捕获可能出现的多个异常,并且针对性的写出异常处理代码。为了避免遗漏可 能出现的异常,可以在最后增加 BaseException 。
python
try:
被监控的、可能引发异常的语句块
except Exception1:
处理Exception1的语句块
except Exception2:
处理Exception2的语句块
[...]
except BaseException:
处理可能遗漏的异常的语句块
python
try:
a = input("请输入被除数:")
b = input("请输入除数:")
c = float(a)/float(b)
print(c)
except ZeroDivisionError:
print("除数不能为0...")
except TypeError:
print("不是数值类型...")
except BaseException as e:
print(e)
print(type(e))
try...except...else结构
try...except...else 结构增加了 else块 。如果 try 块中没有抛出异常,则执行 else 块。如果 try 块中抛出异常,则执行 except 块,不执行 else 块。
python
try:
a = input("请输入被除数:")
b = input("请输入除数:")
c = float(a)/float(b)
except ZeroDivisionError:
print("除数不能为0...")
except TypeError:
print("不是数值类型...")
except BaseException as e:
print(e)
print(type(e))
else:
print(c)
try...except...finally结构
try...except...finally 结构中, finally 块无论是否发生异常都会被执行;通常 用来释放 try 块中申请的资源
python
try:
a = input("请输入被除数:")
b = input("请输入除数:")
c = float(a)/float(b)
except ZeroDivisionError:
print("除数不能为0...")
except TypeError:
print("不是数值类型...")
except BaseException as e:
print(e)
print(type(e))
else:
print(c)
finally:
print("finally...")
traceback模块和生成异常日志
【示例】使用 traceback 模块打印异常信息
python
import traceback
try:
print("step1")
num = 1/0
except:
traceback.print_exc()
【示例】使用 traceback 将异常信息写入日志文件
python
import traceback
try:
print("step1")
num = 1/0
except:
with open("err.log","a") as f:
traceback.print_exc(file=f)
自定义异常类
程序开发中,有时候我们也需要自己定义异常类。自定义异常类一 般都是运行时异常,通常继承 Exception 或其子类即可。自定义异常由 raise 语句主动抛出。
python
class AgeError(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(age)