Py学习  »  Python

Python编程常见问题与解答

Python小屋 • 5 年前 • 428 次点击  

1.问:Python代码运行速度和C语言相比,哪个更快?

答:一般来说,Python代码的运行速度比C语言的慢很多,但是如果充分运用内置函数、标准库对象和函数式编程模式的话,运行速度会提高很多,可以接近C语言。

2.问:学习Python编程,用哪个开发环境更好一些呢?

答:目前来看,Anaconda3和PyCharm用的相对来说多一些。

3.问:在哪里执行pip命令安装Python扩展库?为什么在IDLE中执行会提示语法错误呢?

答:应该在命令提示符环境执行,不是在Python开发环境中执行。并且,最好切换到Python安装目录中的scripts子目录中执行,在安装了多个Python版本时这一点非常重要。

4.问:为什么使用pip命令安装扩展库是提示“不是内部或外部命令,也不是可运行的程序或批处理文件”?

答:检查系统环境变量path是否包含Python的安装目录以及scripts子目录,如果不包含的话,添加进去,或者切换到Python安装目录的scripts子目录中执行pip命令。

5.问:使用pip安装扩展库总是提示网络超时,该怎么办呢?

答:可以下载安装包或whl文件离线安装,或者指定国内源,不使用pip默认的国外源。

6.问:使用pip安装扩展库时失败,提示需要安装VC++,该怎么办呢?

答:如果是Windows系统的话,可以使用浏览器打开https://www.lfd.uci.edu/~gohlke/pythonlibs/下载合适版本的whl文件,然后离线安装。

7.问:我在https://www.lfd.uci.edu/~gohlke/pythonlibs/下载的文件名太长了,为了打字方便就改成了很短的名字,结果不能用了,必须使用原来的文件名吗?

答:是的,不能修改文件名,必须保持原来的名字。

8.问:使用pip安装扩展库时,明明提示已经安装成功了,但是使用import导入时又提示没有安装该扩展库,为什么呢?

答:这样的情况一般是因为安装了多个Python版本。在一个版本下安装的扩展库不能在另一个版本中使用,需要分别进行安装。

9.问:map对象不支持下标吗?为什么使用下标访问其中的元素时提示“TypeError: 'map' object is not subscriptable”呢?

答:是的,map对象、enumerate对象、zip对象、filter对象、reversed对象和生成器对象这些具有惰性求值特点的对象都不支持使用整数下标访问其中的元素。可以把这类对象转换为列表、元组来一次性获取其中的元素,或者使用for循环逐个遍历其中的元素。

10.问:访问列表中元素时,提示“IndexError: list index out of range”,这是什么原因呢?

答:应该是下标指定的位置不存在,检查下标是否有效。一个长度为L的列表,有效下标范围是[-L, L-1]。

11.问:在我的代码中x是一个列表,我使用y=x.sort()语句把它排序后的结果赋值给y,然后使用y.index(3)查看3在y中的下标时,为什么会提示“AttributeError: 'NoneType' object has no attribute 'index'”呢?

答:列表的sort()方法是原地排序,没有返回值。在Python中,没有返回值的方法,都认为返回空值None,而空值是没有index()方法的。

12.问:我创建了一个集合,想在里面加入一个列表作为元素,结果提示“TypeError: unhashable type: 'list'”,这是什么意思呢?

答:在Python中,不可哈希(unhashable)和可变的意思是一样的。整数、实数、复数、字符串、元组这些是不可变的,或者说是可哈希的。而列表、字典、集合是可变的,或者说是不可哈希的。字典的“键”和集合的元素都要求必须是不可变的,也就是可哈希的。

13.问:我调用函数时提示“TypeError: f() missing 2 required positional arguments: 'a' and 'b'”,该怎么办呢?

答:调用函数时,位置参数的数量必须符合函数定义,如果函数要求接收2个位置参数,那么调用时也应传递2个位置实参。

14.问:运行代码时提示“SyntaxError: expected an indented block”,怎么解决呢?

答:Python代码对缩进的要求非常严格,相同层次的代码必须具有同样的缩进量。

15.问:运行代码时提示“AttributeError: 'list' object has no attribute 'add'”,为什么呢?

答:列表对象没有add()方法,集合才有add(),仔细检查对象的类型。

16.问:我想删除元组当中的一个元素,提示“TypeError: 'tuple' object doesn't support item deletion”,是什么意思呢?

答:在Python中,元组和字符串这样的容器类对象是不可变的,不支持其中元素的增加、修改和删除操作。

17.问:我想使用下标访问集合中的第一个元素,运行代码时提示“TypeError: 'set' object does not support indexing”,是因为集合不支持下标吗?

答:是的。Python集合里面的元素是无序的,不能使用下标访问特定位置的元素。

18.问:我想使用切片操作修改列表中的部分元素,运行代码时提示“ValueError: attempt to assign sequence of size 1 to extended slice of size 3”,该怎么办呢?

答:使用切片操作修改列表中部分元素时,如果第三个数字step的值不等于1,那么等号左侧的切片长度和等号右侧的列表长度必须一致。

19.问:已知x是一个字符,我想使用x+1得到下一个字符,为什么提示“TypeError: can only concatenate str (not "int") to str”呢?

答:Python不支持字符和整数相加,如果想得到下一个字符,可以使用表达式chr(ord(x)+1)。

20.问:运行代码时提示“NameError: name 'value' is not defined”,怎么办呢?

答:根据提示信息来看,是说变量value没定义。很可能是拼写错误,仔细检查变量是否拼写正确。

21.问:我的代码可以运行,但是结果不对,怎么办呢?

答:代码可以运行表示没有语法错误,不代表没有逻辑错误。遇到这种情况时,仔细检查代码的逻辑和问题的要求是否一致,是否把>写成>=了,或者忽略了range()函数返回的是左闭右开区间了,是不是把运算符**写成*了,是不是代码缩进有错误。

22.问:明明记事本程序文件是存在的,为什么会提示“FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'C:\\Windows\notepad.exe'”呢?

答:在这个路径中,第二个反斜线和后面的字母n恰好组成转义字符\n,应该使用两个反斜线或者使用原始字符串。

23.问:访问文件时,提示“PermissionError: [WinError 5] 拒绝访问。: 'test.txt'”,怎么办呢?

答:应该是文件具有“只读”之类的特殊属性,或者当前登录的用户账号没有权限访问该文件。

24.问:我机器上明明是有test.txt这个文件的,为什么使用内置函数open()打开时提示文件不存在呢?

答:如果文件test.txt不在当前文件夹中,在打开或读写时必须指定完整路径。

25.问:从“资源管理器”来看,我当前文件夹中明明有test.txt文件,但是使用内置函数open()打开时还是提示文件不存在,可能是哪里错了呢?

答:默认情况下,“资源管理器”会隐藏一些常见类型文件的扩展名,去掉这个隐藏,检查一下文件的名字是不是test.txt.txt。

26.问:运行代码读取文本文件内容时,提示“UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 0: invalid start byte”,是什么错误呢?

答:如果文件中包含中文字符,应使用正确的编码格式打开,也就是明确使用内置函数open()的encoding参数指定编码格式。如果不知道文件采用什么编码格式,可以使用记事本打开之后使用“另存为”功能保存成特定的编码格式。

27.问:我已经使用“pip install docx”命令安装了扩展库docx,为什么无法运行书上的代码操作Word文件呢?

答:操作Word文件的扩展库名字叫python-docx,不是docx。另外要注意,扩展库python-docx只能操作Word 2007或更新版本的文档,不能处理Word 2003之前的文档。

28.问:使用open()函数打开文件往里写入内容时,提示“TypeError: write() argument must be str, not bytes”,是什么原因呢?

答:如果要写入文本文件的话,可以使用'w'模式;如果写入二进制文件的话,应该使用'wb'模式。

29.问:使用内置函数open()打开文件之后,只能按照顺序从前往后读取内容吗?

答:也不是,如果需要读取前面已经读取过的内容,可以使用文件对象的seek()方法修改文件指针的位置。

30.问:我用字符串方法startwith()测试一个字符串是否以另一个字符串为前缀,怎么会提示“AttributeError: 'str' object has no attribute 'startwith'”这样的错误呢?

答:字符串没有startwith()方法,应该是startswith()。同理,也没有endwith()方法,而是endswith()。

31.问:表达式{1, 2, 3}

答:关系运算符作用于集合时,表示集合之间的包含关系。对于集合A和B,只有A是B的真子集时,A

32.问:两个列表是怎么比较大小的呢?

答:列表比较大小时,是从前往后依次比较其中的每个元素,直到得到明确的结论为止。以[1, 2, 3]和[1, 2, 4]为例,第一个元素相等,第二个元素也相等,第三个元素3<4,所以[1, 2, 3][1, 2, 3]。以[4, 2, 1]和[3, 5, 1]为例,第一个元素4>3,此时可以直接得出结论[4, 2, 1]>[3, 5, 1],后面的元素不再比较。元组和字符串也使用同样的方式比较大小。

33.问:程序中有个map对象,第一次使用是正常的,但是再使用时好像里面就没有元素了,这是怎么回事呢?

答:map对象、enumerate对象、zip对象、filter对象、reversed对象和生成器对象这些具有惰性求值特点的对象,其中的元素只能使用一次,访问过的元素无法再次访问。

34.在IDLE中运行程序,提示错误“UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 96-96: Non-BMP character not supported in Tk”,但是代码怎么检查都是对的,怎么办呢?

答:IDLE中有些字符无法正常输出,换个开发环境,或者在命令提示符环境中运行程序就可以了。



温馨提示

进入公众号,通过菜单“最新资源”==>“历史文章”可以快速查看分专题的文章列表,通过“最新资源”==>“微课专区”可以观看Python微课,通过“最新资源”==>“培训动态”可以查看近期Python培训安排,通过“最新资源”==>“教学资源”可以查看Python教学资源。



--------董付国老师Python系列图书--------

1)《Python程序设计(第2版)》清华大学出版社

2)《Python可以这样学》清华大学出版社

3)《Python程序设计基础(第2版)》清华大学出版社

4)《中学生可以这样学Python》清华大学出版社,配套微课:《中学生可以这样学Python》84节微课免费观看地址

5)《Python程序设计开发宝典》清华大学出版社

6)《玩转Python轻松过二级》清华大学出版社

7)《Python程序设计基础与应用》机械工业出版社

8)《Python程序设计实验指导书》清华大学出版社(预计2019年1月出版)

9)《Python编程基础与案例集锦(中学版)》电子工业出版社(预计2019年2月出版)


《中学生可以这样学Python》84节微课免费观看地址

非计算机专业《Python程序设计基础》教学参考大纲

计算机相关专业“Python程序设计”教学大纲(参考)

《Python程序设计》实验指导书(30个实验)

《Python程序设计基础与应用》课后习题答案

Python课程期末考试编程题自动批卷原理与实现模板

“Python小屋”免费资源汇总(截至2018年11月28日)


系列教学PPT:

1900页Python系列PPT分享一:基础知识(106页)

1900页Python系列PPT分享二:Python序列(列表、元组、字典、集合)(154页)

1900页Python系列PPT分享三:选择与循环结构语法及案例(96页)

1900页Python系列PPT分享四:字符串与正则表达式(109页)

1900页Python系列PPT分享五:函数设计与应用(134页)

1900页Python系列PPT分享六:面向对象程序设计(86页)

1900页Python系列PPT分享七:文件操作(132页)

1900页Python系列PPT分享八:异常处理结构与程序调试、测试(70页)

报告PPT(163页):基于Python语言的课程群建设探讨与实践

报告PPT(123页):Python编程基础精要

2000页Python系列PPT分享九:(GUI编程)(122页)

Python实验项目1例:使用进程池统计指定范围内素数的个数

(PPT)Python程序设计课程教学内容组织与教学方法实践



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/9xoESqTLOS
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/28589
 
428 次点击