ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
~~~ try: pass except <异常类型>: pass except <异常类型> as 变量: pass except: pass else: pass finally: pass # 也可以这样写 try: pass except (exce1, exce2, ...) as e: pass ~~~ 只能处理一个异常 ----------------- `try`子句中,第一个异常出现后,程序直接寻找相应的`except`处理,找不到则向上冒泡 raise,不再执行剩余的`try`子句。 ~~~ try: a # NameError print('continue try statement') # 并没有执行到这里 int('a') # ValueError except ValueError as e: print(f'ValueError: {e}') except NameError as e: print(f'NameError: {e}') # 程序执行结果: # NameError: name 'a' is not defined ~~~ except 继承关系的异常 ------------------------ 谁在前,匹配谁。 例: ~~~ try: 10/0 except ZeroDivisionError: print('ZeroDivisionError') except ArithmeticError: print('ArithmethicError') # 程序执行结果:ZeroDivisionError ~~~ SyntaxError 无法捕获 ------------------------ ~~~ try: print 'abc' except SyntaxError: pass # 程序执行结果: # SyntaxError: Missing parentheses in call to 'print'. Did you mean print('abc')? ~~~ except Exception as e 和 except Exception, e ------------------------------------------------- python3仅支持 except Exception as e Exception & BaseException -------------------------------- 捕获一个通用异常使用 Exception。 BaseException 包含三个与 Exception 同级的高级异常。 ~~~ BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- StopIteration +-- StopAsyncIteration ... ... ... ... ~~~ 使用finally释放资源 --------------------- ~~~ try: f = open('./a.text') finally: f.close() ~~~ 使用内置语法代替 try/except ------------------------------- #### with `with`语句在打开文件后会自动调用`finally`并关闭文件 ~~~ with open('./a.txt') as f: pass ~~~ #### getattr() `getattr()`函数用于返回一个对象属性值。 适用于对象的属性:obj.attr 不适用于 index 或 key:l[1]、d['key'] ~~~ getattr(...) getattr(object, name[, default]) -> value ~~~ 设置第三个参数默认值可以避免异常: ~~~ class A: pass a = A() b = getattr(A, 'name', 'stephen') print(b) # stephen ~~~