本期Python教程将解释 Python 3.9 中的新特性,而不是 3.8。官网目前也只有 3.8 的下载包,3.9 需要自己编译 Cpython。
语言上的变化
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] 和 sys.path[0] 显示的也是绝对路径,而不是相对路径 (这地方之前提出了一个 bug),通过 os.chdir()更改当前目录后,这些路径仍然有效。但是现在出现异常 traceback 信息的时候还会显示
__m