新聞中心
這篇文章將為大家詳細(xì)講解有關(guān)解決python無法使用import語句的問題,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
在蘭山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都營銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,蘭山網(wǎng)站建設(shè)費(fèi)用合理。
在練習(xí)Python中package的相對導(dǎo)入時(shí),即
from . import XXX
或者
from .. import XXX
有時(shí)會(huì)遇到這樣兩個(gè)錯(cuò)誤:
SystemError: Parent module '' not loaded, cannot perform relative import
和
ValueError: attempted relative import beyond top-level package
其實(shí)這兩個(gè)錯(cuò)誤的原因歸根結(jié)底是一樣的:在涉及到相對導(dǎo)入時(shí),package所對應(yīng)的文件夾必須正確的被python解釋器視作package,而不是普通文件夾。否則由于不被視作package,無法利用package之間的嵌套關(guān)系實(shí)現(xiàn)python中包的相對導(dǎo)入。
文件夾被python解釋器視作package需要滿足兩個(gè)條件:
1、文件夾中必須有__init__.py文件,該文件可以為空,但必須存在該文件。
2、不能作為頂層模塊來執(zhí)行該文件夾中的py文件(即不能作為主函數(shù)的入口)。
補(bǔ)充:在"from YY import XX"這樣的代碼中,無論是XX還是YY,只要被python解釋器視作package,就會(huì)首先調(diào)用該package的__init__.py文件。如果都是package,則調(diào)用順序是YY,XX。
另外,練習(xí)中“from . import XXX”和“from .. import XXX”中的'.'和'..',可以等同于linux里的shell中'.'和'..'的作用,表示當(dāng)前工作目錄的package和上一級的package。
舉個(gè)例子:
目錄樹
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
運(yùn)行文件:main.py
結(jié)果
I'm Tom's __init__! I'm Tom's Brother! Traceback (most recent call last): File "D:\PythonLearning\TestIm\main.py", line 3, infrom 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順利執(zhí)行,首先執(zhí)行了Tom文件夾下的__init__.py文件,后來執(zhí)行了tomBrother.py文件,但是當(dāng)執(zhí)行到“from .. import kate”時(shí)報(bào)錯(cuò),這是因?yàn)槲覀兪窃赥estIm文件夾下把main.py文件作為主函數(shù)的入口執(zhí)行的,因此盡管TestIm文件夾中有__init__.py文件,但是該文件夾不能被python解釋器視作package,即Tom package不存在上層packge,自然會(huì)報(bào)錯(cuò),相對導(dǎo)入時(shí)超出了最高層級的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
運(yùn)行文件:main.py
結(jié)果
I'm top's __init__! I'm Tom's __init__! I'm Tom's Brother!! I'm Kate's __init__! I'm Tom!
即主函數(shù)入口不在TestIm中,則TestIm和其同樣包含__init__.py文件的子文件夾都被python解釋器視作package,形成相應(yīng)的嵌套關(guān)系。可以正常使用from . import XXX和from .. import XXX。
關(guān)于解決python無法使用import語句的問題就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
當(dāng)前文章:解決python無法使用import語句的問題
本文來源:http://ef60e0e.cn/article/gsjijh.html