国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python導入模塊時遇到的錯誤分析

Python導入模塊時遇到的錯誤分析

2020-12-04 00:52楊勇 Python

這篇文章主要給大家詳細解釋了在Python處理導入模塊的時候出現錯誤以及具體的情況分析,非常的詳盡,有需要的小伙伴可以參考下

當遇到無法導入某個python模塊時,可能會是沒有安裝某個模塊,也有可能是某模塊在加載過程中失敗,也有可能是陷入了循環導入的問題。本文詳細解釋了這個問題。

1. 模塊未安裝或者路徑不對

ImportError: No mudule named myModule

有兩種可能,一是該模塊沒有安裝,一般可以用

pip install %module_name%

來解決。注意有時候模塊安裝包名并不等于要導入的模塊名。這種情況下可以通過pip search | list命令來嘗試找到正確的包。

另一種情況就是包雖然安裝了,但當前運行的程序加載的路徑有錯。python運行時將從以下位置嘗試加載python modules:

* 當前目錄

* 環境變量$PYTHONPATH所指示的值,這是一個由“:”分隔的字符串,各個子字符串都是文件系統的一個路徑。

* 標準庫目錄,如dist-site-packages下的模塊。

* 在.pth文件中指定的路徑,如果存在.pth文件的話。

可以使用以下方式來查看python運行時的包含路徑:

?
1
2
import sys
print(sys.path)

在運行出錯的腳本裝頭部加上這一段代碼,然后在控制臺中查看打印出來的python類庫路徑,檢查安裝包是否已包含在上述路徑中。

***可以通過下面的方式將未包含在路徑中的模塊臨時包含進來:***

sys.path.append("path/to/module")

另外,還可以在shell窗口中查看當前的python包含路徑:

echo $PYTHONPATH

2. 無法導入已存在的模塊

如果要導入的模塊包含了native代碼,并且native代碼加載(初始化)失敗時,就會導致這種錯誤。使用ssl, gevent等涉及native的模塊時,如果對應的native程序并未安裝,則會出現這樣的錯誤。

另一種錯誤情況是,使用相對路徑導入時,父模塊還未導入成功。見下面的代碼:

?
1
2
3
4
5
main.py
mypackage/
  __init__.py
mymodule.py
myothermodule.py

mymodule.py如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env python3
 
# Exported function
def as_int(a):
  return int(a)
 
# Test function for module
def _test():
  assert as_int('1') == 1
 
if __name__ == '__main__':
  _test()

以及myothermodule代碼如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env python3
 
from .mymodule import as_int
 
# Exported function
def add(a, b):
  return as_int(a) + as_int(b)
 
# Test function for module
def _test():
  assert add('1', '1') == 2
 
if __name__ == '__main__':
  _test()

如果執行mypackage/myothermodule,則會報以下錯誤:

Traceback (most recent call last):
 File "myothermodule.py", line 3, in <module>
   from .mymodule import as_int
SystemError: Parent module '' not loaded, cannot perform relative import
[這篇文章](#Relative imports in Python 3)給出了更詳細的解答。

3. 循環導入

這種錯誤稱之為"circular (or cyclic) imports"。是python獨有的一種導入錯誤,在象java這樣的語言中就不存在。

假設有如下兩個文件,a.py和b.py:

?
1
2
3
4
5
6
7
#a.py
print "a in"
import sys
print "b imported: %s" % ("b" in sys.modules, )
import b
print "a out"
print b.x

以及:

?
1
2
3
4
5
#b.py
print "b in"
import a
print "b out"
x = 3

執行python a.py,將得到以下結果:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ python a.py
a in         
b imported: False
b in
a in
b imported: True
a out
Traceback (most recent call last):
 File "a.py", line 4, in <module>
  import b
 File "/home/shlomme/tmp/x/b.py", line 2, in <module>
  import a
File "/home/shlomme/tmp/x/a.py", line 7, in <module>
  print b.x
AttributeError: 'module' object has no attribute 'x'

出現這種情況的原因是產生了循環導入。循環導入,以及在導入過程中python進行了加鎖操作,最終導致在模塊b未導入完成時就引用了其中的名字。

判斷導入錯誤是否是因為循環導入引起的,主要看堆棧中是否出現兩次重復的導入。比如上述堆棧中a.py出現兩次,因此可以判斷是這個文件引起的循環導入。

要解決這個問題,可以把模塊看成一種資源,對所有要引入的模塊進行編號,再按靜態資源排序法順次導入,就可以避免循環導入。

原文鏈接:https://zhuanlan.zhihu.com/p/28897221

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 中国av在线免费观看 | 一区二区三区四区精品 | 久久久精品综合 | 久久久久久久免费 | 97久久精品| 在线视频中文字幕 | 国产精品久久久久久一区 | k8久久久一区二区三区 | av中文字幕在线播放 | 亚洲品质自拍视频网站 | 搞黄视频在线观看 | 欧美成人免费网站 | 亚洲第一视频网站 | 中文字幕精品一区二区三区精品 | www.成人 | 久久久久久亚洲精品 | 成人激情视频 | 国产大片一区 | 96自拍视频 | 日本午夜视频 | 亚洲视频在线看 | 亚洲视频自拍 | 中文av一区| 久久久久久亚洲精品 | 视频一区二区中文字幕 | 亚洲片国产一区一级在线观看 | 精品久久久久久亚洲综合网 | 一区日韩| 亚洲欧美影院 | 日本在线免费观看 | 精品久久久久国产 | 午夜视频网 | 久久亚洲黄色 | www.fefe66.com| 成人在线视频一区 | 国产黄a三级三级看三级 | 激情综合五月 | 日韩一区二区视频在线 | 亚洲免费视频一区 | 亚洲精品一区二区在线观看 | 免费视频一区二区 |