专栏首页Python小屋Python编程常见问题与解答

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++,该怎么办呢?

答:如果是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}<{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小屋(Python_xiaowu),作者:董付国

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python+matplotlib绘图使用Latex引擎渲染坐标轴刻度文本上标

    封面图片:《Python程序设计基础与应用》(ISBN:9787111606178),董付国,机械工业出版社

    Python小屋屋主
  • 虚拟Python环境可以这样创建

    Python支持创建多个虚拟环境,每个虚拟环境都是包含Python和相应扩展库的一个目录,多个虚拟环境(文件夹)之间互相不干扰。如果有可能根据需要使用不同版本的...

    Python小屋屋主
  • Python使用集合实现素数筛选法

    首先生成指定范围内的所有自然数,然后从前往后遍历其中的数字,并分别删除这些数字的倍数,最后剩下的数字都是素数。 很久很久以前,曾经写过一个使用列表+filter...

    Python小屋屋主
  • uwsgi -- unavailable modifier requested: 0 -- 的解决办法

    找到对应版本的uwsgi-plugin-python,yum install一下 然后在ini文件中添加plugins = python,或者命令行添加–pl...

    用户1214487
  • 设置Mysql的连接超时参数wait_timeout、interactive_timeout

    最近处理一个web服务时,写数据库数据时,经常报“MySQL server has gone away”,一查发现是mysql的wait_timeout、int...

    zhangdd
  • 揭秘!勒索病毒背后超10亿美金的商业帝国

    这个周一,“开电脑”变成了最惊心动魄的事儿,大家生怕“中彩”染上“想哭”(WannaCry)病毒。截至15日早晨,这一比特币勒索病毒已蔓延至全球150个国家,全...

    BestSDK
  • 2018年6月会有哪些手机发布? | 拔刺

    镁客网
  • Docker容器无法被stop or kill问题

    使用docker stop / docker kill / docker rm -f 等命令处理后,容器立马自动重启

    码代码的陈同学
  • WPF 解决 StylusPlugIn 点击穿透问题

    在使用 StylusPlugIn 的时候会出现这样的坑,只要一个元素附加有 StylusPlugIn 在这个元素上面放另一个没有附加 StylusPlugIn ...

    林德熙
  • 如何为服务器硬盘配置RAID或JBOD模式

    在部署Hadoop平台的过程中,一般会要求数据盘配置RAID 0或者JBOD模式(直通模式),本文将详细讲解如何在HP dl380 Gen9服务器上配置RAID...

    Fayson

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动