异常
try...except
while True: try: #可能发生异常的语句块 s1 = int(input('请输入一个数字')) if s1 == 88: break except BaseException as e: #异常处理语句块 print(e) print('异常') print('循环数字输入程序结束')
try ...多个excep结构(先子后父)
为避免遗漏可以在最后添加BaseException
#测试try多个except结构 while True: try: a = input('请输入被除数') b = input('请输入除数') c = float(a)/float(b) print(c) except ZeroDivisionError: print('除数不能为0') except ValueError: print('不能输入字符串') except NameError: print('异常,变量不存在') except BaseException as e: print(e)
try...except...else结构
try: a = input('请输入被除数:') b = input('请输入除数:') c = float(a) / float(b) except BaseException as e: print(e) else: print(c) print('程序结束')
try...except...finally结构(finally块无论是否发生异常都会执行)
try: a = input('请输入被除数') b = input('请输入除数') c = float(a) / float(b) except BaseException as e: print(e) finally: print('最终') print('结束')
with上下文管理
with open('d:/bb.txt') as f: for line in f: print(line)
with上下文管理可以自动管理资源,在 with 代码块执行完毕后自动还原进入该代码之前的 现场或上下文。不论何种原因跳出 with 块,不论是否有异常,总能保证资源正常释放。极 大的简化了工作,在文件操作、网络通信相关的场合非常常用
trackback
import traceback try: print('step1') num = 1 / 0 except: with open('d:/bb.txt', 'a') as f: traceback.print_exc(file=f)
自定义异常类
通常继承Exception或者其子类即可,自定义异常由 raise 语句主动抛出。
class AgeError(Exception): def __init__(self, errorInfo): Exception.__init__(self) self.errorInfo = errorInfo def __str__(self): return self.errorInfo+'年龄错误,应该在1-150之间!' age = input('请输入一个年龄:') if age < '1' or age > '150': raise AgeError(age) else: print('正常')