Python相对导入报错怎么解决

技术Python相对导入报错怎么解决本篇内容主要讲解“Python相对导入报错怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python相对导入报错怎么解决”吧!相对

本文主要讲解“如何解决Python的相对导入错误”。感兴趣的朋友不妨看看。本文介绍的方法简单、快速、实用。让边肖带你学习“如何解决Python相对导入错误”!

00-1010相对导入是指同一项目下不同模块之间的相互导入,称为相对导入。

相对导入

项目结构图如下:

Python相对导入报错怎么解决

项目名称:项目。此目录中有xx个子项目和test.py模块。xx子目录有Y和Z两个子目录,Y子目录有abc.py模块和yy.py模块,Z子目录有zz.py模块。Yy.py是xx子项目的入口。Test.py是整个项目的入口。

测试模块的内容

'''

这个模块是整个项目的入口。

'''

fromxx.yimportyy

yy.f2()

打印(yy.num1,yy.num2,yy.num3)

out:

123

10

你好

10123888yy.py模块内容

'''

本模块是xx子项目对外参考的入口。

'''

from.abcimport*

从.z.zzimport*

num3=888

def F2(:)

打印(num2)

打印zz.py模块的内容

'''

子项目,导入的子模块。

'''

num1=10

deff(:)

打印abc.py模块的内容(“你好”)

'''

子项目,导入的子模块。

'''

Num2=123或以上是模拟大型项目的框架。test.py模块运行时,可以看到输出正常,完全没有问题。

请仔细阅读yy.py模块的内容:

从。abc导入*声明:. 表示当前目录, ABC是指abc.py模块。

从.z.zz导入*语句,.. 表示父目录, z表示z文件夹,zz表示zz.py模块。

此外,... 表示祖父目录,请熟悉从路径识别结构。

从开始的相对导入:声明。例如,从。abc导入*。

以文件夹、包或模块的名称开头的绝对导入:语句,例如从xx.y导入yy。

到目前为止还没有遇到错误,但是如果尝试调试yy.py模块,直接运行yy.py模块会出现错误。

Python相对导入报错怎么解决

相对导入的案例

很奇怪!为什么运行test.py模块调用yy.py模块时不出错,而通过直接脚本运行yy.py模块时出错?我在网上找了很多资料,但是一点头绪都没有。后来发现一个建议,在yy.py模块中添加一个到sys.path的路径。虽然方法可行但不优雅,但没有说明为什么yy.py模块在调用时不会给出错误,直接运行时会给出错误。

我特意查了很多资料,对被调用时不报错,主动执行的情况做了仔细分析。我首先想到的是上面的特性是__name__,这个变量在被调用和主动执行的时候内容是不一样的。后来我们根据模块调用数据找到__package__了。这个变量的内容在被调用时和被主动执行时是不同的。

让我们尝试打印两个变量_ _ name __和__package__来看看被调用和主动执行之间的区别。

修改yy.py模块文件的内容

'''

本模块是xx子项目对外参考的入口。

'''

from.abcimport*

从.z.zzimport*

打印(__name__)

打印(_package__)

num3=888

def F2(:)

打印(num2)

打印(num1)执行测试的结果。复制模块:

xx.y.yy

xx.y

123

10

你好

0123888直接执行yy.py的结果(临时标注相对导入的两行代码,否则出错会导致打印内容不可见):

Python相对导入报错怎么解决

00-1010仔细观察yy.py模块导入时打印的内容与主动执行时打印的内容之间的差异。我想到了最好的蟒解。

'''

本模块是xx子项目对外参考的入口。

'''

__package__='xx.y '

from.abcimport*

从.z.zzimport*

num3=888

def F2(:)

打印(num2)

Print(num1)直接将__package__ variable的值修改为调用时的值,这样yy.py模块主动运行时不会报错,调用时也不会报错。

至此,相信大家对“如何解决Python的相对导入错误”有了更深的理解,下面我们来做一些实际的工作吧!这是网站。更多相关内容,可以去相关渠道查询,关注我们,继续学习!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/116543.html

(0)

相关推荐

  • python字典一些常见的魔法方法以及遇到的面试题有哪些

    技术python字典一些常见的魔法方法以及遇到的面试题有哪些本篇文章给大家分享的是有关python字典一些常见的魔法方法以及遇到的面试题有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,

    攻略 2021年10月21日
  • 楼上漏水,楼上漏水了怎么办,证据怎么收集

    技术楼上漏水,楼上漏水了怎么办,证据怎么收集楼上漏水了,作为邻居,首先要协商,如果对方同意整改,事情也就解决了。如果对方不同意,可以到法院起诉。可以拍照、留录音录像等。最好再找证人。证据包括楼上漏水:(一)物证;(二)书

    生活 2021年10月25日
  • ubuntu中如何解决php无法编译问题

    技术ubuntu中如何解决php无法编译问题小编给大家分享一下ubuntu中如何解决php无法编译问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一

    2021年12月10日
  • 去除衣服霉点小妙招,怎样去除衣服上面的霉点

    技术去除衣服霉点小妙招,怎样去除衣服上面的霉点家里长期存放的衣服上面都会有或大或小的霉斑,可以用以下方法去除去除衣服霉点小妙招:1、棉线衣服出现霉斑时,用绿豆芽在有霉斑的地方反复揉搓,并用清水漂洗干净,霉斑就会消除。丝绸

    生活 2021年10月21日
  • 什么是进程间通信

    技术什么是进程间通信这篇文章主要介绍“什么是进程间通信”,在日常操作中,相信很多人在什么是进程间通信问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是进程间通信”的疑惑有所帮助!接下来,

    攻略 2021年10月23日
  • 如何Python代码快速解析、整理上万份数据文件

    技术如何Python代码快速解析、整理上万份数据文件如何Python代码快速解析、整理上万份数据文件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所

    攻略 2021年12月4日