Python编程常见问题与解答
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++,该怎么办呢?
答:是的,不能修改⽂件名,必须保持原来的名字。
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:\\'”呢?
答:在这个路径中,第⼆个反斜线和后⾯的字母n恰好组成转义字符\n,应该使⽤两个反斜线或者使⽤原始字符串。
23.问:访问⽂件时,提⽰“PermissionError: [WinError 5] 拒绝访问。: ''”,怎么办呢?
答:应该是⽂件具有“只读”之类的特殊属性,或者当前登录的⽤户账号没有权限访问该⽂件。
24.问:我机器上明明是有这个⽂件的,为什么使⽤内置函数open()打开时提⽰⽂件不存在呢?
答:如果⽂件不在当前⽂件夹中,在打开或读写时必须指定完整路径。
25.问:从“资源管理器”来看,我当前⽂件夹中明明有⽂件,但是使⽤内置函数open()打开时还是提⽰⽂件不存在,可能是哪⾥错了呢?
答:默认情况下,“资源管理器”会隐藏⼀些常见类型⽂件的扩展名,去掉这个隐藏,检查⼀下⽂件的名字是不是。
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之前的⽂档。
python怎么读取py文件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}<{1, 2, 4}的值怎么会是False呢?
答:关系运算符作⽤于集合时,表⽰集合之间的包含关系。对于集合A和B,只有A是B的真⼦集时,A<B的值才是True。
32.问:两个列表是怎么⽐较⼤⼩的呢?
答:列表⽐较⼤⼩时,是从前往后依次⽐较其中的每个元素,直到得到明确的结论为⽌。以[1, 2, 3]和[1, 2, 4]为例,第⼀个元素相等,第⼆个元素也相等,第三个元素3<4,所以[1, 2, 3]<[1, 2, 4]。以[1, 2, 3, 4]和[1, 2, 3]为例,两个列表中前三个元素是相等的,但第⼀个列表中还有多余的元素,所以[1, 2, 3,
4]>[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系列图书--------
1)《Python程序设计(第2版)》清华⼤学出版社
2)《Python可以这样学》清华⼤学出版社
3)《Python程序设计基础(第2版)》清华⼤学出版社
4)《中学⽣可以这样学Python》清华⼤学出版社,配套微课:
5)《Python程序设计开发宝典》清华⼤学出版社
6)《玩转Python轻松过⼆级》清华⼤学出版社
7)《Python程序设计基础与应⽤》机械⼯业出版社
8)《Python程序设计实验指导书》清华⼤学出版社(预计2019年1⽉出版)
9)《Python编程基础与案例集锦(中学版)》电⼦⼯业出版社(预计2019年2⽉出版)
系列教学PPT:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论