Skip to content

契约回归、灰度与退役:练习答案 ​

练习解答 ​

以下是完整离线文件,保存为answer.py后运行python answer.py;先建立与正文一致的初始状态,再验证变体。

python
def decode(envelope):
    if envelope.get('isError') is not False:raise RuntimeError('not explicit success')
    blocks=envelope.get('content',[])
    texts=[b['text'] for b in blocks if b.get('type')=='text']
    if not texts:raise ValueError('missing text result')
    return '\n'.join(texts)
assert decode({'isError':False,'content':[{'type':'text','text':'ok'}]})=='ok'
for e in [{'isError':True,'content':[{'type':'text','text':'failed'}]},{}]:
    try:decode(e)
    except RuntimeError:pass
    else:raise AssertionError('error became success')
print('result decoder passed')

value={'isError':False,'content':[{'type':'text','text':'a'},
       {'type':'image','data':'omitted'},{'type':'text','text':'b'}]}
assert decode(value)=='a\nb'

解码器只承诺文本兼容。需要图片的业务必须保留图片块并由宿主显示,不能把忽略图片称作完整兼容。

用心记录每一步成长