Pathlib一行创建Path实例并调用mkdir为何返回None?能否实现?
Pathlib一行调用mkdir返回None的原因及解决方法
为什么一行写法会得到None?
Path.mkdir()方法的设计就是执行目录创建操作后返回None,不会返回Path对象本身。你在一行写法里,是把mkdir()的返回值直接赋值给了region_path,那自然得到的是None。而两行写法里,先把Path实例赋值给region_path,再调用它的mkdir()方法,这时候只是执行创建目录的动作,region_path仍然指向原来的Path对象,所以能得到有效实例。
可以用一行代码完成吗?
当然可以,有两种常用方式:
方式1:用分号分隔语句
把创建Path对象和调用mkdir的操作放在同一行,用分号分隔:
script_path = Path(__file__).parent.resolve() region_path = Path(script_path/"device_details"/"region"); region_path.mkdir(parents=True, exist_ok=True)
方式2:使用海象运算符(Python 3.8+)
利用海象运算符先绑定Path对象,再调用mkdir,最后返回原对象:
script_path = Path(__file__).parent.resolve() region_path = (p := Path(script_path/"device_details"/"region")).mkdir(parents=True, exist_ok=True) or p
这里因为mkdir()返回None,or会短路取后面的p,也就是我们需要的Path实例。
内容的提问来源于stack exchange,提问作者Mo Fatty
相关产品推荐
相关产品推荐

