【置頂】Python開發(fā)中常見問題


本文長期更新
可以通過CTRL+F在頁面內(nèi)進行問題關(guān)鍵字搜索


參考資料:

問題匯總:

  • 如何在某.py文件中調(diào)用其他.py內(nèi)的函數(shù)
    解答:假設(shè)名為A.py的文件需要調(diào)用B.py文件內(nèi)的C(x,y)函數(shù)
    假如在同一目錄下,則只需
    import B
    if __name__ == "__main__":
        B.C(x,y)
    
    若只需調(diào)用單個函數(shù),也可以
    from B import C
    if __name__ == "__main__":
        C(x,y)
    
    若A.py和B.py位于不同的目錄下,可以用以下方法
    (假設(shè)B.py位于D盤的根目錄下)
    1.引用所在路徑
    import sys
    sys.path.append('D:/')
    import B
    if __name__=="__main__":
        print B.pr(x,y)
    
    2.使用imp
    import imp
    B=imp.load_source('B','D:/B.py')
    import B
    if __name__=="__main__":
        print B.pr(x,y)
    
    注意:B.py這個文件的文件名不能以數(shù)字開頭!

  • Python 中的if __name__ == '__main__'該如何理解
    Python不同于C++等語言,它沒有統(tǒng)一的程序入口, .py 文件是從第一行開始一行一行地執(zhí)行。假設(shè)hub.py文件的前半部分定義了一些函數(shù),后半部分寫了一些代碼來調(diào)用上面的函數(shù),如下所示:
#文件上半部分定義函數(shù)
def A():
    #函數(shù)A的實現(xiàn)
def B():
    #函數(shù)B的實現(xiàn)

#文件下半部分調(diào)用函數(shù)并輸出一些信息
A()
B()
print("this message should not be shown out of this file")

如果我們在outside.py文件中調(diào)用hub.py時,就會打印出this message should not be shown out of this file ,如果不希望別的文件調(diào)用hub.py時打印出上述信息,則可以將hub.py改成:

#文件上半部分定義函數(shù)
def A():
    #函數(shù)A的實現(xiàn)
def B():
    #函數(shù)B的實現(xiàn)

#文件下半部分調(diào)用函數(shù)并輸出一些信息
#但是別的文件調(diào)用hub.py時不打印this message should not be shown out of this file
if __name__ == '__main__' #注意這句話
A()
B()
print("this message should not be shown out of this file")

這樣,別的文件調(diào)用hub.py時就不會打印出this message should not be shown out of this file
原因就是:

  1. __name__ 是內(nèi)置變量,用于表示當前模塊的名字,同時還能反映一個包的結(jié)構(gòu)。
  2. 如果一個模塊被直接運行,則其沒有包結(jié)構(gòu),其 __name__ 值為 __main__

  • pip install keras報錯:TypeError: parse() got an unexpected keyword argument 'transport_encoding'
    在執(zhí)行pip install keras時出錯:
Exception:
Traceback (most recent call last):
  File "D:\software\anaconda3\lib\site-packages\pip\basecommand.py", line 215, in main
    status = self.run(options, args)
  File "D:\software\anaconda3\lib\site-packages\pip\commands\install.py", line 335, in run
    wb.build(autobuilding=True)
  File "D:\software\anaconda3\lib\site-packages\pip\wheel.py", line 749, in build
    self.requirement_set.prepare_files(self.finder)
  File "D:\software\anaconda3\lib\site-packages\pip\req\req_set.py", line 380, in prepare_files
    ignore_dependencies=self.ignore_dependencies))
  File "D:\software\anaconda3\lib\site-packages\pip\req\req_set.py", line 554, in _prepare_file
    require_hashes
  File "D:\software\anaconda3\lib\site-packages\pip\req\req_install.py", line 278, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "D:\software\anaconda3\lib\site-packages\pip\index.py", line 465, in find_requirement
    all_candidates = self.find_all_candidates(req.name)
  File "D:\software\anaconda3\lib\site-packages\pip\index.py", line 423, in find_all_candidates
    for page in self._get_pages(url_locations, project_name):
  File "D:\software\anaconda3\lib\site-packages\pip\index.py", line 568, in _get_pages
    page = self._get_page(location)
  File "D:\software\anaconda3\lib\site-packages\pip\index.py", line 683, in _get_page
    return HTMLPage.get_page(link, session=self.session)
  File "D:\software\anaconda3\lib\site-packages\pip\index.py", line 811, in get_page
    inst = cls(resp.content, resp.url, resp.headers)
  File "D:\software\anaconda3\lib\site-packages\pip\index.py", line 731, in __init__
    namespaceHTMLElements=False,
TypeError: parse() got an unexpected keyword argument 'transport_encoding'

解決方法:
執(zhí)行conda install pip


  • 報錯:ImportError: No module named 'matplotlib.pyplot'; 'matplotlib' is not a package
    解決方法:
    檢查*.py文件的文件名,我把文件名寫成了matplotlib.py,改成matplotlib_test.py就好了

  • 運行jupyter notebook報錯:
    Bad config encountered during initialization:The Jupyter HTML Notebook.
    No such notebook dir: 'C:\Users\cb4\Documents\python'


    解決辦法
    Windows用戶在C:\Users\<user>\.jupyter, Linux用戶在~\.jupyter路徑下打開jupyter_notebook_config.py文件,找到c.NotebookApp.notebook_dir條目,修改路徑。

  • 報錯:IndentationError: unindent does not match any outer indentation level
    解決辦法:一般是因為縮進時TAB空格混用了,建議把TAB改為空格

  • 問題:在github上打開**.ipynb文件過慢
    解決辦法:通過http://nbviewer.jupyter.org這個網(wǎng)站打開github的*.ipynb文件,在https://nbviewer.jupyter.org/github后加入對應(yīng)*.ipynb文件的路徑,如https://github.com/bermanmaxim/LovaszSoftmax/blob/master/demo_multiclass.ipynb的路徑就是/bermanmaxim/LovaszSoftmax/blob/master/demo_multiclass.ipynb,那么在瀏覽器輸入https://nbviewer.jupyter.org/github/bermanmaxim/LovaszSoftmax/blob/master/demo_multiclass.ipynb就可以了。


  • 問題__doc__是什么含義
  • 解答:print(__doc__)將輸出本文件頭部的注釋信息,如
# coding=utf-8
# import xxxlib
"""
測試p當前文件的__doc__,輸出顯示本段文字
"""
print(__doc__) #輸出“測試p當前文件的__doc__”

print(xxxlib.__doc__) #輸出xxxlib這個庫的文檔注釋
  • 問題如何遍歷指定目錄及其子目錄下所有文件
  • 解答看下面代碼
import os

def find_dir(dir_name="/data/測試圖片/"):
    """
    將file_path下的所有jpg文件的絕對路徑存儲到list
    """
    print(find_dir.__doc__) #輸出函數(shù)doc
    
    file_list=[]

    # 使用os.work(),path_name是當前目錄,dir_list是當前目錄下的所有目錄名稱,file_name是當前目錄下的所有文件名稱
    for path_name, dir_list, files_name in os.walk(dir_name):
        for file in files_name:
            if os.path.splitext(file)[1]=='.jpg':
                file_list.append(path_name+'/'+file)
            
        for dir_name in dir_list:
            find_dir(path_name+'/'+dir_name)

    return file_list #將所有文件的絕對路徑存儲在file_list[]中返回
  • 問題:中文字符讀取問題(gbk,utf-8,unicode),dicom文件用pydicom讀取獲得變量age(python3顯示是str類型,但是不知道編碼類型),現(xiàn)在需要知道age中是否包含哪些中文字符
  • 將age重新存儲到一個字節(jié)數(shù)組中,以gbk格式存儲,再編碼轉(zhuǎn)成unicode,這樣操作unicode的字符就沒問題了
def Trans2Unicode(str):
    c=bytearray() # 字節(jié)數(shù)組c
    for ch in str:
        c.append(ord(ch)) # 存成gbk
    print(type(c))
    return c.decode('gbk') # 將gbk轉(zhuǎn)成unicode
  • 問題:python安裝opencv后執(zhí)行import cv2報錯:ImportError: DLL load failed: 找不到指定的模塊”
    解決方案1:conda install --channel https://conda.anaconda.org/menpo opencv3
    解決方案2:從https://pypi.tuna.tsinghua.edu.cn/simple/opencv-python/下載對應(yīng)python版本的包,我是一個個試的,python3.6應(yīng)該使用opencv_python-3.4.1.15-cp36-cp36m-win_amd64.whl
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容