亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

超出相對導入中的頂級包錯誤

超出相對導入中的頂級包錯誤

慕無忌1623718 2019-08-15 17:21:02
超出相對導入中的頂級包錯誤看來這里已經有一些關于python 3中相對導入的問題了,但是在經歷了很多這些問題后,我仍然找不到我的問題的答案。所以這是問題所在。我有一個如下所示的包裹package/    __init__.py    A/       __init__.py       foo.py    test_A/       __init__.py       test.py我在test.py中有一行:from ..A import foo現在,我在文件夾中package,我跑了python -m test_A.test我收到了消息"ValueError: attempted relative import beyond top-level package"但如果我在父文件夾中package,例如,我運行:cd ..python -m package.test_A.test一切都好。現在我的問題是: 當我在文件夾中時package,我在test_A子包中運行模塊test_A.test,根據我的理解,..A只上升一個級別,它仍然在package文件夾中,為什么它給出了消息說beyond top-level package。導致此錯誤消息的原因是什么?
查看完整描述

3 回答

?
Qyouu

TA貢獻1786條經驗 獲得超11個贊



    為什么不起作用?這是因為python不記錄從中加載包的位置。因此,當您這樣做時python -m test_A.test,它基本上只丟棄test_A.test實際存儲的知識package(即package不被視為包)。嘗試from ..A import foo嘗試訪問它不再擁有的信息(即加載位置的兄弟目錄)。它在概念上類似于允許from ..os import path在文件中math。這會很糟糕,因為你希望包是不同的。如果他們需要使用來自另一個包的東西,那么他們應該全局引用它們from os import path并讓python在其中使用$PATH$PYTHONPATH。

    當你使用時python -m package.test_A.test,然后使用from ..A import foo解析就好了,因為它跟蹤了什么package,你只是訪問加載位置的子目錄。

    為什么python不認為當前的工作目錄是一個包? 沒有CLUE,但天哪它會有用。


    查看完整回答
    反對 回復 2019-08-15
    ?
    慕萊塢森

    TA貢獻1810條經驗 獲得超4個贊

    import sys
    sys.path.append("..") # Adds higher directory to python modules path.


    查看完整回答
    反對 回復 2019-08-15
    • 3 回答
    • 0 關注
    • 596 瀏覽
    慕課專欄
    更多

    添加回答

    舉報

    0/150
    提交
    取消
    微信客服

    購課補貼
    聯系客服咨詢優惠詳情

    幫助反饋 APP下載

    慕課網APP
    您的移動學習伙伴

    公眾號

    掃描二維碼
    關注慕課網微信公眾號