python中import的作用_python使用import报错是什么原因

5d5b5e8d094cd765.jpg

在练习Python中package的相对导入时,即from . import XXX

或者from .. import XXX

有时会遇到这样两个错误:SystemError: Parent module '' not loaded, cannot perform relative import

和ValueError: attempted relative import beyond top-level package

其实这两个错误的原因归根结底是一样的:在涉及到相对导入时,package所对应的文件夹必须正确的被python解释器视作package,而不是普通文件夹。否则由于不被视作package,无法利用package之间的嵌套关系实现python中包的相对导入。

文件夹被python解释器视作package需要满足两个条件:

1、文件夹中必须有__init__.py文件,该文件可以为空,但必须存在该文件。

2、不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。

补充:在"from YY import XX"这样的代码中,无论是XX还是YY,只要被python解释器视作package,就会首先调用该package的__init__.py文件。如果都是package,则调用顺序是YY,XX。

另外,练习中“from . import XXX”和“from .. import XXX”中的'.'和'..',可以等同于linux里的shell中'.'和'..'的作用,表示当前工作目录的package和上一级的package。

举个例子:

目录树testIm/

--__init__.py

--main.py : from Tom import tom

--Tom/

--__init__.py : print("I'm Tom's __init__!")

--tom.py : from . import tomBrother, from .. import kate,print("I'm Tom!")

--tomBrother.py print(I'm Tom's Brother!)

--Kate/

--__init__.py : print("I'm Kate's __init__!")

--kate.py

运行文件:main.py

结果I'm Tom's __init__!

I'm Tom's Brother!

Traceback (most recent call last):

File "D:\PythonLearning\TestIm\main.py", line 3, in from Tom import tom

File "D:\PythonLearning\TestIm\Kate\kate.py", line 4, in from .. import kate

ValueError: attempted relative import beyond top-level package>>>

可以看到from . import tomBrother顺利执行,首先执行了Tom文件夹下的__init__.py文件,后来执行了tomBrother.py文件,但是当执行到“from .. import kate”时报错,这是因为我们是在TestIm文件夹下把main.py文件作为主函数的入口执行的,因此尽管TestIm文件夹中有__init__.py文件,但是该文件夹不能被python解释器视作package,即Tom package不存在上层packge,自然会报错,相对导入时超出了最高层级的package。

修改方法:

目录树test/

--main.py : from testIm.Tom import tom

--testIm/

--__init__.py

--Tom/

--__init__.py : print("I'm Tom's __init__!")

--tom.py : from . import tomBrother, from .. import Kate,print("I'm Tom!")

--tomBrother.py print(I'm Tom's Brother!)

--Kate/

--__init__.py : print("I'm Kate's __init__!")

--kate.py

运行文件:main.py

结果I'm top's __init__!

I'm Tom's __init__!

I'm Tom's Brother!!

I'm Kate's __init__!

I'm Tom!

即主函数入口不在TestIm中,则TestIm和其同样包含__init__.py文件的子文件夹都被python解释器视作package,形成相应的嵌套关系。可以正常使用from . import XXX和from .. import XXX。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10卓越性能模式,提升电脑性能

Win10隐藏了一个电源模式“卓越性能”,是比“高性能”模式更强性能的电源模式。 这个模式开启后,电脑到底有没有变快呢?心理上是快了。 开启步骤 1.鼠标移到开始按钮图标上,别动!!!&#xff…

Redis Sentinel 模拟故障迁移

什么是redis sentinel 参考文档:https://redis.io/topics/sentinel 简单的来说,就是Redis Sentinel 为redis 提供高可用性,主要体现在下面几个方面:1.监控:redis sentinel会不间断的监控主服务器和从服务器是否正常工作2.通知:当出现问题时,…

erp生产管理系统流程_企业生产管理好帮手——ERP智能管理系统

ERP企业管理软件是为企业决策层及员工提供决策运行手段的管理平台。在生产制造制造业中,尽管加工早已用于机械自动化,但在仓库管理、人工管理工作,还必须erp公司智能管理系统协助管理方法。erp公司管理软件是公司供应链管理的综合性管理软件&…

神经网络的基本工作原理

神经网络的基本工作原理 一、总结 一句话总结:先给一个初始值,然后依赖正确值(真实值)进行修复模型(训练模型),直到模型和真实值的误差可接受 初始值 真实值 修复模型 1、神经网络由基本的神经元…

jsonrpc aria2_抛弃迅雷,Aria2 新手入门

迅雷已经用了 10 年,一直把它看作是速度最快也最方便的下载工具。迅雷会员也是我必续的服务。但,迅雷堕落了。thunder: 迅雷专属链接越来越少,基本都是磁力、BT 的天下迅雷会员加速不再给力,大量资源速度为 0。会员虽然还有一年多…

pytorch 测试每一类_2D-UNet脑胶质瘤分割BraTs + Pytorch实现

2D-UNet讲解玖零猴:U-Net与FCN的区别医学表现网络详解创新​zhuanlan.zhihu.comBraTs数据准备数据来源本文用的训练集和验证集均来自BraTs2018的训练集(其中HGG:210个病人,LGG:75个病人)但由于BraTs只公开训练集数据,没有测试集数据,如果在训练集中再拆一部分用来作…

电商必备6款商品详情数据采集,一键批量下载淘猫拼和1688宝贝信息和链接!

当我们分析竞品以及选款复制时,往往需要先将商品信息采集下载下来,然而一个个去寻找商品并手动下载,显然是不现实的。 特别是做无货源店群的卖家,可能需要在不同平台采集商品信息,那么就需要用到适用不同平台的商品采…

vue.js的项目实战

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本文由蔡述雄发表于云社区专栏 需求背景 组件库是做UI和前端日常需求中经常用到的,把一个按钮,导航,列表之类的元素封装起来,方便日常使用,调用方…

c++ 输出二进制_Python入门3print格式化输出的几种方法

接《Python入门2》print格式化输出的几种方法⒂格式化输出举例【例】str_name"小明"num_age15print("我叫%s,今年%d岁"%(str_name,num_age))#注意print的前后两部分用%间隔,不是逗号,后面的输出列表加小括号【例】str&qu…

485串口测试工具软件下载_串口调试助手详细讲解(结合实操),通讯问题不再是问题...

经常会有学员问我,老师老师,我的plc和变频器通讯不上了,不知道什么原因,您能帮我看看么。其实吧,这个一般远程是帮不上你什么的,还是要你自己去测试,找出问题,那么怎么测试呢&#x…

pycharm快捷键_春节快结束了回单位途中总结下pycharm快捷键

一、编辑(Editing)CtrlSpace 基本的代码完成(类、方法、属性)CtrlAltSpace 快速导入任意类 CtrlShiftEnter 语句完成CtrlP 参数信息(在方法中调用参数)CtrlQ 快速查看文档F1 Web帮助文档主页ShiftF1 选中对象的Web帮助文档Ctrl悬浮/单机鼠标左键 简介/进入代码定义CtrlZ 撤销上…

挣值管理名词(EV、AC、PV等)与公式详解

概念 PV PLaned,计划,Value,数值,计划值,是指项目实施过程中某阶段计划要求完成的工作量所需的预算工时(或费用)。 是反应计划,不是反映应消耗的工时或费用。 PVBCWS计划工作量*…

c++ 三次多项式拟合_线性回归进阶版,多项式线性回归讲解与实现(附完整代码)...

每天给小编五分钟,小编用自己的代码,带你轻松学习深度学习!本文将会带你做完一个深度学习进阶版的线性回归---多项式线性回归,带你进一步掌握线性回归这一深度学习经典模型,然后在此基础上,小编将在下篇文章…

mysql查看表占用空间大小

select TABLE_NAME,DATA_LENGTHINDEX_LENGTH,TABLE_ROWS from INFORMATION_SCHEMA.tables where TABLE_SCHEMAnbly_twjr DATA_LENGTHINDEX_LENGTH 的值除以1024,再除以1024,折算成MB

mfc文字闪烁如何解决_男同胞福音!如何解决尿尿时最尴尬的难题?建议偷偷收藏(文字版)...

上面这个现象呢,是男生上厕所时的一种微妙状态。两个男生往往会由于尴尬而不愿意站在相邻的坑位上厕所。我将其命名为男厕所的泡利不相容定律。一、男厕尴尬定律简介先给大家科普一下男厕所的构造,小便区是一排立式坑位。好的厕所有隔板,阻挡…

docker-compose 运行 Flask 应用最佳实践

背景 以前部署应用,需要各种环境配置,各种shell操作才能搭建一套可用的服务。现在有了Docker之后,部署方式变了更加容易,不容易出现配置错误,环境不一致问题。解决了在本地环境可以运行,迁移到线上出现各种…

dbeaver导出表结构和数据_mall数据库表结构概览

mall是一套电商系统,后台系统主要包括商品管理、订单管理、营销管理(运营管理促销管理)、内容管理、用户管理等模块,本文主要对这些模块的数据库表结构及功能做大概的介绍。商品管理数据库表结构功能结构订单管理数据库表结构功能结构营销管理数据库表结…

arima模型 p q d 确定_自回归移动平均模型(ARMA)

自回归模型(AR):①描述当前值和历史值之间的关系,用变量自身的历史时间数据对自身进行预测。②自回归模型必须满足平稳性的要求。③移动平均模型(MA)关注的是自回归模型中的误差项的累加。移动平均法能有效…

Mysql闪回工具之binlog2sql的原理及其使用

生产上误删数据、误改数据的现象也是时常发生的现象,作为运维这时候就需要出来补锅了,最开始的做法是恢复备份,然后从中找到需要的数据再进行修复,但是这个时间太长了,对于大表少数数据的修复来讲,动作太大…