假设x是通过调用第三方API拿回来的数据,a、b、c、d这些key本以为都是存在的key,运行:
上面是python3.10及更早版本抛出的异常,subable 指下标的意思,这的意思是说
int
对象没有下标,只有字典和列表这样的对象才有。看错误日志很难定位到底是哪个int对象不能subable。你要挨个去调试才知道。
Python3.11版本给出了更人性化的错误提示,
^^^
标记的位置就是真正报错的地方。
另外,
BaseException
还添加了一个
add_note
方法,我们可以在捕获异常时加入一些附加信息方便后续的bug定位。
def
main
->
None
:
try
:
raise
TypeError(
"bad type"
)
except
TypeError
as
e:
e.add_note(
"这是一段附加信息"
)
logging.exception(e)
支持TOML格式文件解析
TOML是一种比YAML更清晰的配置文件格式,现在Python3.11直接内置了标准库来解析TOML文件。
import
pprint
import
tomllib
with
open(
"test.toml"
,
"rb"
)
as
f:
data = tomllib.load(f)
pprint.pprint(data)
toml文件
a = "a"
b = "b"
c.x = "c.x"
c.y = "c.y"
x = "d.x"
y = "d.y"
[[e]]
x = "e[0].x"
y = "e[0].y"
[[e]]
x = "e[1].x"
y = "e[1].y"
[f.A]
x.y = "f.A.x.y"
[f.B]
x.y = """
[f.C]
points = [
{ x=1, y=1, z=0 },
{ x=2, y=4, z=0 },
{ x=3, y=9, z=0 },
解析出来的字典对象是:
更丰富的类型提示
新增
Self
类型
以前在类中定义一个方法如果要声明返回值是类本身的实例,要写成类的字符串形式,哪天要是给这个类重命名,这个字符串也得跟着改。Python3.11新增了
Self
后方便不少。
新增字符串枚举StrEnum
python3.10前定义一个字符串枚举时,只能继承Enum类,现在可以直接继承
StrEnum
类了,它是字符串
str
的子类。所以枚举值也是个字符串, 现在可以直接用枚举值与字符串做比较,而不需要像3.10一样先获取
value
性能方面,python3.11对解释器做了不少优化,整体性能比3.10提高了10~60%。这要归功于一个叫 Faster CPython的项目,Faster CPython 是一个由微软赞助,Python 之父 Guido van Rossum、微软高级软件工程师 Eric Snow 和 Mark Shannon 共同负责该项目。可以预计未来Python还会更快。
PS:这篇文章排版花了我半个小时,但依然没有达到我想要的效果。话说,只要是有代码的文章排版就很费时,朋友们有没有可推荐的能支持markdown的微信编辑器,视觉效果看起来要尽量简洁一点
返回搜狐,查看更多
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
发布于:
山西省