module - python模块from import语句相对导入,加不加点号有什么区别?
巴扎黑
巴扎黑 2017-04-18 10:34:44
0
2
1106

python版本为2.7

目录结构

$ ls -R
.:
t.py  util/

./util:
__init__.py  __init__.pyc  db.py  db.pyc

内容

util/db.py

# coding=utf-8          
                        
var=100                 
def show():             
    print var           

t.py

# coding=utf-8         
                    
from .util.db import var # util包前面加点
                        
print var               
if __name__=='__main__':
    print var           

运行报错

$ python t.py
Traceback (most recent call last):
  File "t.py", line 3, in <module>
    from .util.db import var
ValueError: Attempted relative import in non-package

提示不能在non-package下导入。

在当前目录下新建__init__.py后依然是相同错误。

但是将util前面的点号去掉之后可以正常输出,为什么呢?

谢谢

巴扎黑
巴扎黑

membalas semua(2)
小葫芦

Import relatif hanya boleh digunakan dalam pakej yang sama dan fail dalam pakej tidak boleh dijalankan secara bebas

巴扎黑

t.py dilaksanakan sebagai skrip utama Jika terdapat kaedah dari di dalamnya, ralat akan dilaporkan (hanya modul dalam pakej menggunakan kaedah ini)
Walaupun _init_ ditambahkan, anda masih melaksanakan. ia secara langsung. Anda harus menukar kepada python -m xxx.t

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan