本文将解释 Python 3.9 中的新特性,而不是 3.8。有关完整的详细信息,请参见更改日志。
https://docs.python.org/3.9/whatsnew/changelog.html#changelog
语言上的变化
1、使用 Python 进行相对导包的时候,__import__
出现异常时类型由原来的 ValueError 变成了 ImportError。(由 Ngalim Siregar 在 bpo-37444 中贡献)
"""Resolve a relative module name to an absolute one."""
bits = package.rsplit('.', level - 1)
if len(bits) < level:
- raise ValueError('attempted relative import beyond top-level package')
+ raise ImportError('attempted relative import beyond top-level package')
base = bits[0]
return '{}.{}'.format(base, name) if name else base
-:github 中的删除
+:github 中的增加
补充知识:__import__()
函数一般用于动态加载类和函数。
代码示例
r = __import__('requests_html', globals(), locals(), ['HTMLSession'], 0)
session = r.HTMLSession()
print(session.get("http://www.baidu.com"))
#globals() 函数会以字典类型返回当前位置的全部全局变量。
#locals() 函数会以字典类型返回当前位置的全部局部变量。
ImportError 触发异常原因:在涉及到相对导入时,package 所对应的文件夹必须正确的被 python 解释器视作 package ,而不是普通文件夹。否则由于不被视作 package,无法利用 package 之间的嵌套关系实现 Python 中包的相对导入。
2、Python 现在获取在命令行上指定的脚本文件名的绝对路径(例如:python script.py:__main__ 模块的 __file__ 属性,sys.argv[0