新手常见6种的python报错及解决方法


Posted in Python onMarch 09, 2018

此篇文章整理新手编写代码常见的一些错误,有些错误是粗心的错误,但对于新手而已,会折腾很长时间才搞定,所以在此总结下我遇到的一些问题。希望帮助到刚入门的朋友们。

1.NameError变量名错误

报错:

>>> print a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

解决方案:

先要给a赋值。才能使用它。在实际编写代码过程中,报NameError错误时,查看该变量是否赋值,或者是否有大小写不一致错误,或者说不小心将变量名写错了。

注:在Python中,无需显示变量声明语句,变量在第一次被赋值时自动声明。

>>> a=1
>>> print a
1

2.IndentationError代码缩进错误

点击返回目录

代码:

a=1
b=2
if a<b:
print a

报错:

IndentationError: expected an indented block

原因:

缩进有误,python的缩进非常严格,行首多个空格,少个空格都会报错。这是新手常犯的一个错误,由于不熟悉python编码规则。像def,class,if,for,while等代码块都需要缩进。

缩进为四个空格宽度,需要说明一点,不同的文本编辑器中制表符(tab键)代表的空格宽度不一,如果代码需要跨平台或跨编辑器读写,建议不要使用制表符。

解决方案:

a=1
b=2
if a<b:
 print a

3.AttributeError对象属性错误

报错:

>>> import sys

>>> sys.Path
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'Path'

原因:

sys模块没有Path属性。

解决方案:

python对大小写敏感,Path和path代表不同的变量。将Path改为path即可。

>>> sys.path
['', '/usr/lib/python2.6/site-packages']

python知识拓展:

使用dir函数查看某个模块的属性

>>> dir(sys)

['__displayhook__', '__doc__', '__egginsert', '__excepthook__', '__name__', '__package__', '__plen', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'py3kwarning', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions']

4.TypeError类型错误

4.1入参类型错误

代码:

t=('a','b','c')
for i in range(t):
 print a[i]

报错:

TypeError: range() integer end argument expected, got tuple.

原因:

range()函数期望的入参是整型(integer),但却给的入参为元组(tuple)

解决方案:

将入参元组t改为元组个数整型len(t)

将range(t)改为range(len(t))

4.2入参个数错误

4.2.1关于元组作为入参

代码:

# coding=utf-8
'''
Created on 2016-7-21
@author: Jennifer
Project:显式等待
'''
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import ctime

driver=webdriver.Firefox()
driver.get(r'http://www.baidu.com/')
loc=(By.ID,'kw')
print ctime()
element=WebDriverWait(driver,5,0.5).until(EC.visibility_of_element_located(*loc))
element.send_keys('selenium')
print ctime()
driver.quit()

报错:

Traceback (most recent call last):

 File "D:\system files\workspace\selenium\autotestcombat\test_4_7_1_webdriverwait.py", line 18, in <module>
 element=WebDriverWait(driver,5,0.5).until(EC.visibility_of_element_located(*loc))
TypeError: __init__() takes exactly 2 arguments (3 given)

原因:

类的函数__init__()需要两个参数,但实际上给了三个。
EC.visibility_of_element_located类的入参应该是两个入参: self和元组。但却给了三个参数 self和*loc中的两个元素作为入参。

解决方案:

这里要将EC.visibility_of_element_located(*loc)改为EC.visibility_of_element_located(loc),入参为元组,而不是元组里边的两个值。

python知识拓展:

关于入参*的用法
以元组作为函数入参,如果元组前加*号,说明传递的入参为元组中的各个元素。如果元组前没有加*号,说明传递的入参为元组本身。

举例说明:
loc =(By.NAME,'email')
element1=WebDriverWait(driver,5,0.5).until(EC.visibility_of_element_located(loc)) #只要一个参数(不考虑self情况下),元组loc,即:(By.NAME,'email')。 直接传loc。
element2=driver.find_element(*loc)#需要两个参数,元组loc的元素,即:By.NAME,'email'。直接传*loc 

4.2.2其他

报错:

>>> import os

>>> os.listdir()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: listdir() takes exactly 1 argument (0 given)

原因:

listdir()函数需要一个入参,但是只给了0个入参。

解决方案:

加一个入参

>>> os.listdir('/home/autotest')
['hello.py', 'email126pro']

python知识拓展:

如何查看某个函数的使用,可以使用help查看。

>>> help(os.listdir)
Help on built-in function listdir in module posix:

listdir(...)
listdir(path) -> list_of_strings

Return a list containing the names of the entries in the directory.

path: path of directory to list

说明:os.listdir()函数需要一个path路径入参,函数结果返回值是由字符串组成的列表。

4.3非函数却以函数来调用

报错:

>>> t=('a','b','c')
>>> t()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object is not callable

原因:

t为元组,元组不能被调用,不能加()。初学者编写代码时,偶尔粗心会将变量当做方法来调用(不小心加了括号)。所以要认真检查下是否变量加了括号,或者方法漏加了括号。

解决方案:

将括号去除。

>>> t
('a', 'b', 'c')

5.IOError输入输出错误

5.1文件不存在报错

报错:

>>> f=open("Hello.py")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'Hello.py'

原因:

open()函数没有指明mode,默认为只读方式,如果该目录下没有Hello.py的文件,则会报错,可查看是否拼写有错误,或者是否大小写错误,或者根本不存在这个文件。

解决方案:

该目录下有hello.py文件,打开该文件即可。

>>> f=open("hello.py")

python知识拓展:

如何查看python解释器当前路径:

>>> import os
>>> os.getcwd()
'/home/autotest'

查看python解释器当前路径下有哪些文件:

>>> os.listdir('/home/autotest')
['hello.py', 'email126pro']

5.2因文件权限问题报错

报错:

>>> f=open("hello.py")

>>> f.write("test")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: File not open for writing

原因:

open("hello.py")如果入参没有加读写模式参数mode,说明默认打开文件的方式为只读方式,而此时又要写入字符,所以权限受限,才会报错。

解决方案:

更改模式

>>> f=open("hello.py",'w+')
>>> f.write("test")

6.KeyError字典键值错误

报错:

常见报错有,测试一接口,接口返回数据一般是json格式,而测试该接口校验某个值是否正确,如果key拼写错了,就会报KeyError。简单举例如下:

>>> d={'a':1,'b':2,'c':3}
>>> print d['a']
1
>>> print d['f']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'f'

解决方案:

访问d中有的键值,如a,b或c。

推荐书单:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python修改操作系统时间的方法
May 18 Python
利用Python实现命令行版的火车票查看器
Aug 05 Python
深入理解NumPy简明教程---数组2
Dec 17 Python
Python 操作MySQL详解及实例
Apr 30 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
Python随机生成均匀分布在单位圆内的点代码示例
Nov 13 Python
浅谈python装饰器探究与参数的领取
Dec 01 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
Jan 07 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
Feb 26 Python
Python+Tkinter制作专属图形化界面
Apr 01 Python
使用Python解决图表与画布的间距问题
Apr 11 Python
Python 函数基础知识汇总
Mar 09 #Python
Python 使用with上下文实现计时功能
Mar 09 #Python
TensorFlow搭建神经网络最佳实践
Mar 09 #Python
TensorFlow实现Batch Normalization
Mar 08 #Python
用Django实现一个可运行的区块链应用
Mar 08 #Python
Python pyinotify日志监控系统处理日志的方法
Mar 08 #Python
TensorFlow模型保存和提取的方法
Mar 08 #Python
You might like
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
php自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
完美解决通过IP地址访问VUE项目的问题
2020/07/18 Javascript
python实现在字符串中查找子字符串的方法
2015/07/11 Python
开始着手第一个Django项目
2015/07/15 Python
python制作websocket服务器实例分享
2016/11/20 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
python抓取京东小米8手机配置信息
2018/11/13 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
学前教育学生自荐信范文
2013/12/31 职场文书
校园安全检查制度
2014/02/03 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
初一军训感言
2015/08/01 职场文书
深入理解 Golang 的字符串
2022/05/04 Golang