新手常见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 相关文章推荐
一则python3的简单爬虫代码
May 26 Python
wxPython中文教程入门实例
Jun 09 Python
Python中if __name__ == '__main__'作用解析
Jun 29 Python
python之Socket网络编程详解
Sep 29 Python
Python 专题六 局部变量、全局变量global、导入模块变量
Mar 20 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
Django使用httpresponse返回用户头像实例代码
Jan 26 Python
pandas把dataframe转成Series,改变列中值的类型方法
Apr 10 Python
pycham查看程序执行的时间方法
Nov 29 Python
浅析python,PyCharm,Anaconda三者之间的关系
Nov 27 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
Feb 17 Python
python Protobuf定义消息类型知识点讲解
Mar 02 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使用ereg验证文件上传的方法
2014/12/16 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
Array.slice()与Array.splice()的返回值类型
2006/10/09 Javascript
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
jquery 判断滚动条到达了底部和顶端的方法
2014/04/02 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
简单的js表格操作
2016/09/24 Javascript
解析js如何获取css样式
2016/12/11 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
Angular 1.x个人使用的经验小结
2017/07/19 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
js中的闭包实例展示
2018/11/01 Javascript
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
详解datagrid使用方法(重要)
2020/11/06 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
Python pass详细介绍及实例代码
2016/11/24 Python
Python2随机数列生成器简单实例
2017/09/04 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
Django 开发调试工具 Django-debug-toolbar使用详解
2019/07/23 Python
pandas的resample重采样的使用
2020/04/24 Python
python制作微博图片爬取工具
2021/01/16 Python
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
医院护士专业个人的求职信
2013/12/09 职场文书
公司募捐倡议书
2014/05/14 职场文书
班级体育活动总结
2014/07/05 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
婚前协议书范本两则
2014/10/16 职场文书
天气温馨提示语
2015/07/14 职场文书
iPhone13再次曝光
2021/04/15 数码科技
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers