【置顶】Python开发中常见问题参考资料:问题汇总:



本文长期更新 可以通过CTRL+F在页面内进行问题关键字搜索


参考资料:

问题汇总:

  • 如何在某.py文件中调用其他.py内的函数 解答:假设名为A.py的文件需要调用B.py文件内的C(x,y)函数 假如在同一目录下,则只需 import B if __name__ == "__main__": B.C(x,y) 若只需调用单个函数,也可以 from B import C if __name__ == "__main__": C(x,y) 若A.py和B.py位于不同的目录下,可以用以下方法 (假设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这个文件的文件名不能以数字开头!

  • Python 中的if __name__ == '__main__'该如何理解 Python不同于C++等语言,它没有统一的程序入口, .py 文件是从第一行开始一行一行地执行。假设hub.py文件的前半部分定义了一些函数,后半部分写了一些代码来调用上面的函数,如下所示:
#文件上半部分定义函数
def A():
    #函数A的实现
def B():
    #函数B的实现

#文件下半部分调用函数并输出一些信息
A()
B()
print("this message should not be shown out of this file")

如果我们在outside.py文件中调用hub.py时,就会打印出this message should not be shown out of this file ,如果不希望别的文件调用hub.py时打印出上述信息,则可以将hub.py改成:

#文件上半部分定义函数
def A():
    #函数A的实现
def B():
    #函数B的实现

#文件下半部分调用函数并输出一些信息
#但是别的文件调用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")

这样,别的文件调用hub.py时就不会打印出this message should not be shown out of this file 原因就是:

  1. __name__ 是内置变量,用于表示当前模块的名字,同时还能反映一个包的结构。
  2. 如果一个模块被直接运行,则其没有包结构,其 __name__ 值为 __main__

  • pip install keras报错:TypeError: parse() got an unexpected keyword argument 'transport_encoding' 在执行pip install keras时出错:
Exception:
Traceback (most recent call last):
  File "D:softwareanaconda3libsite-packagespipasecommand.py", line 215, in main
    status = self.run(options, args)
  File "D:softwareanaconda3libsite-packagespipcommandsinstall.py", line 335, in run
    wb.build(autobuilding=True)
  File "D:softwareanaconda3libsite-packagespipwheel.py", line 749, in build
    self.requirement_set.prepare_files(self.finder)
  File "D:softwareanaconda3libsite-packagespip
eq
eq_set.py", line 380, in prepare_files
    ignore_dependencies=self.ignore_dependencies))
  File "D:softwareanaconda3libsite-packagespip
eq
eq_set.py", line 554, in _prepare_file
    require_hashes
  File "D:softwareanaconda3libsite-packagespip
eq
eq_install.py", line 278, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "D:softwareanaconda3libsite-packagespipindex.py", line 465, in find_requirement
    all_candidates = self.find_all_candidates(req.name)
  File "D:softwareanaconda3libsite-packagespipindex.py", line 423, in find_all_candidates
    for page in self._get_pages(url_locations, project_name):
  File "D:softwareanaconda3libsite-packagespipindex.py", line 568, in _get_pages
    page = self._get_page(location)
  File "D:softwareanaconda3libsite-packagespipindex.py", line 683, in _get_page
    return HTMLPage.get_page(link, session=self.session)
  File "D:softwareanaconda3libsite-packagespipindex.py", line 811, in get_page
    inst = cls(resp.content, resp.url, resp.headers)
  File "D:softwareanaconda3libsite-packagespipindex.py", line 731, in __init__
    namespaceHTMLElements=False,
TypeError: parse() got an unexpected keyword argument 'transport_encoding'

解决方法: 执行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:Userscb4Documentspython'

解决办法: 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这个网站打开github的*.ipynb文件,在https://nbviewer.jupyter.org/github后加入对应*.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__) #输出函数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类型,但是不知道编码类型),现在需要知道age中是否包含哪些中文字符
  • 将age重新存储到一个字节数组中,以gbk格式存储,再编码转成unicode,这样操作unicode的字符就没问题了
def Trans2Unicode(str):
    c=bytearray() # 字节数组c
    for ch in str:
        c.append(ord(ch)) # 存成gbk
    print(type(c))
    return c.decode('gbk') # 将gbk转成unicode
优质内容筛选与推荐>>
1、JavaScript跨域方法
2、RegisterHotKey class wrapper
3、idea2017激活
4、ASP.NET Web API 框架研究 Controller创建过程与消息处理管道
5、javascript学习笔记(三):运算符、循环语句


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号