出错处理
try-except-else-finally 结构
语句块执行顺序如下图所示, 这四种语句块可以一起使用,也可以使用 try
和其他语句组合,可行的组合有 try-except
、try-finally
、try-except-finally
、try-except-else
、try-except-else-finally
。
import json
UNDEFINED = object()
def divide_json(path):
handle = open(path, 'r+', encoding='utf-8') # 可能发生 IOError
try:
data = handle.read() # 可能发生 UnicodeDecodeError
op = json.loads(data) # 可能发生 ValueError
value = (op['numerator'] / op['denominator']) # 可能发生 ZeroDivisionError
except ZeroDivisionError as e:
return UNDEFINED
else:
op['result'] = value
result = json.dumps(op)
handle.seek(0)
handle.write(result) # 可能发生 IOError
return value
finally:
handle.close()
if __name__ == '__main__':
path = './my_file.txt'
divide_json(path)
上述程序很好的演示了 Python 异常处理,__main__
调用 divide_json
, 该函数中只捕获了 ZeroDivisionError
异常,发生该异常时,进入 except
块内,返回一个未定义对象,然后进入 finally
关闭文件。对于程序中其他可能出现的异常,均抛出到上层,由调用者处理,这里调用者 __main__
未对其他异常做处理,则按照默认方式进行处理。
ASCII 字符转换
ord(char) # 字符转ascii码
chr(ascii_code) # ascii 转字符