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

1.NameError变量名错误

报错:

>>> print a

Traceback (most recent call last):

File "", line 1, in

NameError: name 'a' is not defined

解决方案:

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

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

>>> a=1

>>> print a

1

2.IndentationError代码缩进错误

点击返回目录

代码:

a=1

b=2

if a

print a

报错:

IndentationError: expected an indented block

原因:

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

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

解决方案:

a=1

b=2

if a

print a

3.AttributeError对象属性错误

报错:

>>> import sys

>>> sys.Path

Traceback (most recent call last):

File "", line 1, in

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

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 "", line 1, in

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 "", line 1, in

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 "", line 1, in

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 "", line 1, in

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 "", line 1, in

KeyError: 'f'

解决方案:

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

推荐书单:

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

复制的python代码格式错误_新手常见6种的python报错及解决方法相关推荐

  1. 远程桌面连接:出现身份验证错误,要求的函数不受支持报错,解决方法

    今天我用A电脑远程B电脑时出现下图报错,网上查阅资料,亲测,问题已经解决. 1.问题截图 2.解决方法:在A电脑上执行以下操作(注:你远程出现报错的电脑) 1)window+R键,打开运行窗口,输入& ...

  2. python句柄无效_subprocess.Popen 运行windows命令出现“句柄无效”报错的解决方法

    [代码笔记]iOS-关于UIFont的一些define 一,效果图. 二,工程图. 三,代码. RootViewController.h #import @interface RootViewCont ...

  3. python googletrans_Python使用googletrans报错的解决方法

    问题 最近在工作中发现了一个问题,Python代码一直用着免费的Google翻译API插件googletrans,这两天突然就报错了: Traceback (most recent call last ...

  4. 登录网银显示服务器内部错误怎么办,网银提示无法大额转账?点击登录出现报错?解决方法看这里...

    原标题:网银提示无法大额转账?点击登录出现报错?解决方法看这里 为 帮助大家能够 更好地使用江西·农商银行网上银行 今天小编收集了一些 关于网上银行的常见问题 并详细为大家解答 1️⃣ 跨行转账(个人 ...

  5. Python之Datasets库安装报错的解决方法

    Python之Datasets库安装报错的解决方法 Problem 想要run一下最近在看的有关Domain Adaptation的论文实现代码,文中使用了Datasets库,习惯性使用Anacond ...

  6. sqlserver 遇到以零作除数错误的处理 不报错的解决方法

    sqlserver 遇到以零作除数错误的处理 不报错的解决方法 参考文章: (1)sqlserver 遇到以零作除数错误的处理 不报错的解决方法 (2)https://www.cnblogs.com/ ...

  7. CubeMx 生成的FreeRTOS 代码在ARM compiler6 编译__forceinline 报错的解决方法

    一.问题 如题,CubeMx 生成的FreeRTOS 代码在ARM compiler6 编译__forceinline 报错的解决方法. 二.解决方法 第一种方法,将编译器换回default comp ...

  8. java fastjson 泛型_解决fastjson泛型转换报错的解决方法

    错误信息 Exception in thread "main" java.lang.ClassCastException: com.alibaba.fastjson.JSONObj ...

  9. sqlserver 遇到以零作除数错误的处理 不报错的解决方法

    原文:sqlserver 遇到以零作除数错误的处理 不报错的解决方法 使用sqlserver 的选项来禁止出现以零除的错误中断,让而让其为null set ansi_warnings off SET  ...

最新文章

  1. 2020新款笔记本送一台!4核+8G+512固态
  2. 2021-07-15 深度学习服务器Linux终端网络训练training结果(顶会ECCV网络BiSeNet)
  3. 小米五android o卡吗,【图片】小米5优化教程,吃鸡卡的进来!!!_小米5吧_百度贴吧...
  4. python生成条形码
  5. Linux下的网络远程安装
  6. linux统计使用最多的10个命令
  7. 今晚7点见!红魔5G游戏手机联手热门手游打造专属主题
  8. 拒绝礼仪与技巧(转)
  9. Oracle中的环境变量(ORACLE_HOME 和 ORACLE_SID)
  10. C++ sort()函数的用法
  11. 思维导图,UML在线画图工具
  12. 太神了-图片可以转换成Word文档了
  13. MFC:Ribbon界面设计
  14. adobe acrobat pro dc 无法打开PDF_pdf怎样转成word格式
  15. MongonDB基本概念和文档操作
  16. treap【来自蒟蒻的整理】
  17. 并发编程之CompletableFuture全网最细最全用法(一)
  18. zcmu-1931 wjw的剪纸
  19. Axure 9 实战案例,动态面板的应用 5,官网首页自动轮播广告
  20. Mac 安装包破损 或 软件不受信任无法打开

热门文章

  1. java 代码压缩javascript_利用Java来压缩 JavaScript 代码详解
  2. git中的Stash Changes和UnStash Changes用法
  3. android自定义键盘遮挡,Android软键盘遮挡的四种完美解决方案
  4. python输出一首诗_Python:如何打印我的简单诗
  5. (转)eclipse常用插件在线安装地址或下载地址
  6. java调用指定浏览器打开指定网址
  7. response.sendRedirect(quot;http://www.baidu.comquot;);重定向
  8. ftp ---- 配置文件(默认配置文件解读)
  9. java百度结果的正则表达式_java正则表达式
  10. MySQL 一张表中两个字段值互换