17个新手常见Python运行时错误

当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂。这里列出了常见的的一些让你程序 crash 的运行时错误。

1)忘记在 if , elif , else , for , while , class ,def 声明末尾添加 :(导致 “SyntaxError :invalid syntax”)

该错误将发生在类似如下代码中:

if spam == 42
print('Hello!')


2)使用 = 而不是 ==(导致“SyntaxError: invalid syntax”)

= 是赋值操作符而 == 是等于比较操作。该错误发生在如下代码中:

if spam = 42:
print('Hello!')


3)错误的使用缩进量。(导致“IndentationError:unexpected indent”、“IndentationError:unindent does not match any outer indetation level”以及“IndentationError:expected an indented block”)

记住缩进增加只用在以:结束的语句之后,而之后必须恢复到之前的缩进格式。该错误发生在如下代码中:

print('Hello!')
print('Howdy!')

或者:
if spam == 42:
print('Hello!')
print('Howdy!')

或者:
if spam == 42:
print('Hello!')


4)在 for 循环语句中忘记调用 len() (导致“TypeError: 'list' object cannot be interpreted as an integer”)

通常你想要通过索引来迭代一个list或者string的元素,这需要调用 range() 函数。要记得返回len 值而不是返回这个列表。

该错误发生在如下代码中:

spam = ['cat', 'dog', 'mouse']
for i in range(spam):
print(spam[i])


5)尝试修改string的值(导致“TypeError: 'str' object does not support item assignment”)

string是一种不可变的数据类型,该错误发生在如下代码中:

spam = 'I have a pet cat.'
spam[13] = 'r'
print(spam)


而你实际想要这样做:

spam = 'I have a pet cat.'
spam = spam[:13] + 'r' + spam[14:]
print(spam)


6)尝试连接非字符串值与字符串(导致 “TypeError: Can't convert 'int' object to str implicitly”)

该错误发生在如下代码中:

numEggs = 12
print('I have ' + numEggs + ' eggs.')


而你实际想要这样做:

numEggs = 12
print('I have ' + str(numEggs) + ' eggs.')

或者:
numEggs = 12
print('I have %s eggs.' % (numEggs))


7)在字符串首尾忘记加引号(导致“SyntaxError: EOL while scanning string literal”)

该错误发生在如下代码中:

print(Hello!')

或者:
print('Hello!)

或者:
myName = 'Al'
print('My name is ' + myName + . How are you?')


8)变量或者函数名拼写错误(导致“NameError: name 'fooba' is not defined”)

该错误发生在如下代码中:

foobar = 'Al'
print('My name is ' + fooba)

或者:
spam = ruond(4.2)

或者:
spam = Round(4.2)


9)方法名拼写错误(导致 “AttributeError: 'str' object has no attribute 'lowerr'”)

该错误发生在如下代码中:

spam = 'THIS IS IN LOWERCASE.'
spam = spam.lowerr()


10)引用超过list最大索引(导致“IndexError: list index out of range”)

该错误发生在如下代码中:

spam = ['cat', 'dog', 'mouse']
print(spam[6])


11)使用不存在的字典键值(导致“KeyError:‘spam’”)

该错误发生在如下代码中:

spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'}
print('The name of my pet zebra is ' + spam['zebra'])


12)尝试使用Python关键字作为变量名(导致“SyntaxError:invalid syntax”)

Python关键不能用作变量名,该错误发生在如下代码中:

class = 'algebra'


Python3的关键字有:and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield

 

13)在一个定义新变量中使用增值操作符(导致“NameError: name 'foobar' is not defined”)

不要在声明变量时使用0或者空字符串作为初始值,这样使用自增操作符的一句spam += 1等于spam = spam + 1,这意味着spam需要指定一个有效的初始值。

该错误发生在如下代码中:

spam = 0
spam += 42
eggs += 42


14)在定义局部变量前在函数中使用局部变量(此时有与局部变量同名的全局变量存在)(导致“UnboundLocalError: local variable 'foobar' referenced before assignment”)

在函数中使用局部变来那个而同时又存在同名全局变量时是很复杂的,使用规则是:如果在函数中定义了任何东西,如果它只是在函数中使用那它就是局部的,反之就是全局变量。

这意味着你不能在定义它之前把它当全局变量在函数中使用。

该错误发生在如下代码中:

someVar = 42
def myFunction():
print(someVar)
someVar = 100
myFunction()


15)尝试使用 range()创建整数列表(导致“TypeError: 'range' object does not support item assignment”)

有时你想要得到一个有序的整数列表,所以 range() 看上去是生成此列表的不错方式。然而,你需要记住 range() 返回的是 “range object”,而不是实际的 list 值。

该错误发生在如下代码中:

spam = range(10)
spam[4] = -1


也许这才是你想做:

spam = list(range(10))
spam[4] = -1


(注意:在 Python 2 中 spam = range(10) 是能行的,因为在 Python 2 中 range() 返回的是list值,但是在 Python 3 中就会产生以上错误)

 

16)不错在 ++ 或者 -- 自增自减操作符。(导致“SyntaxError: invalid syntax”)

如果你习惯于例如 C++ , Java , PHP 等其他的语言,也许你会想要尝试使用 ++ 或者 -- 自增自减一个变量。在Python中是没有这样的操作符的。

该错误发生在如下代码中:

spam = 1
spam++


也许这才是你想做的:

spam = 1
spam += 1


17)忘记为方法的第一个参数添加self参数(导致“TypeError: myMethod() takes no arguments (1 given)”)

该错误发生在如下代码中:

class Foo():
def myMethod():
print('Hello!')
a = Foo()
a.myMethod()

转载于:https://www.cnblogs.com/vineleven/p/4777806.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android activity alias,动态更换桌标 Activity-alias

前言动态更换App图标,网上可以收搜到很多,这里也是参考前人经验,读完本文可以得到,如何动态更换桌标(非网络获取桌标图片),标志位的阐述,更加透彻的理解.用到的知识activity-alias并不是代表一个Activity,而是代表一个已经存在的Activity的别名。它使用在清单文件中…

python替代php,Python架构的PHP替代方案

I am happily using fabric for my Python projects for deployment. Now I am engaged in a larger PHP project and wondering if there is something like fabric for PHP?解决方案Hmm? Why does it matter? Fabric is just python scripting. So its project language a…

MAC终端安装grunt--javascript世界得构建工具

祝贺我成为前端啦!~~从年前得小测试到今年得前端,成功转型!我真是一个进步得好青年,好少女! 这两天出去受虐,面了两家前端,表现非常不好,还是回到我现在得公司好好沉淀技术&#xff…

android sdk eclipse没导入,Android—新的eclipse导入SDK出错解决办法

原先系统崩溃,重装系统,加入一块内存条,从32位变成62位,原先的eclipse用不了;去官网下载64位的eclipse,安装,用一样的方法导入SDK。这时候肯定会提示错误,如下:1.This An…

两个分数化简比怎么化_我学《分数的意义》心得

停课不停学已经有将近两个月了,我们迈入了“分数”这一部分。听妈妈说,这一块内容很重要,可我觉得到目前为止(明天就学真分数、假分数和带分数了),分数好像并不比四年级难。看了看书,再做点练习,把这点新的…

html在线拖拽环绕,jQuery实现html元素拖拽

代码很简单,效果非常棒,直接给大家上源码:html定投金额 :元10050010002000300040005000600070008000900010000单位:元css.money-input{margin:36px auto 0;width:330px;font-size:14px;color:#818181}.input-rela{width:250px;height:42px;di…

iphone 抹除设备是什么意思_SMT设备有哪些,SMT是什么意思?

SMT设备其实就是表面贴装技术所需要的机器,一般一条SMT整线常规包含以下设备:上板机、印刷机、接驳台、SPI、贴片机、插件机、回流焊、波峰焊、AOI、X-ray、下板机等设备,以上设备是一条比较完整的smt配线清单设备,不同工厂可根据…

visual studio 安装Entity framework失败

今日通过Nuget安装Entity Framwork 6.1.3时候在最后一步石一直报错,提示“安装失败,正在回滚”。 回滚也就罢了,居然还卸载不了安装了一半的EF。 shit 考虑是不是得用管理员模式run Visual Studio 试之,然并卵。 是不是Nuget版本太…

笔记本软件页面分辨率低_笔记本最容易忽略的屏幕 有几个参数一定要知道

对于第一次购买笔记本的朋友来说,往往会忽视一个重要的硬件,那就是屏幕。尺寸有多大?分辨率是多少?色彩好不好?这些都应该是大家应该关心的问题。下面笔者就和大家聊聊笔记本屏幕应该注意的几个参数。1、尺寸屏幕尺寸示…

html优美界面左侧下拉,一组时尚的侧边栏菜单和下拉列表UI设计

这是一款非常时尚的可伸展的侧边栏菜单和select下拉列表以及手风琴式垂直下拉列表UI设计效果。它们通过简单的CSS样式设置,以及和jQuery,jqueryUI的配合,制作出非常时尚的web组件UI设计效果。制作方法HTML结构侧边栏的HTML结构使用在中嵌套无…

.NET基础 (03)生成、部署和管理

生成、部署和管理1 如何生成强签名的程序集2 如何把程序集放入GAC中3 延迟签名及其作用4 程序集的版本分哪几部分 1 如何生成强签名的程序集在生成程序集时,CLR提供了两种可选类型:强签名程序集。弱签名程序集。 强签名程序集是一个带有公钥和数字签名的…

.net 识别一维码_天若OCR文字识别 v5.0 原创好用的OCR及翻译小工具

一款非常好用的OCR及翻译小工具,集合百度、腾讯、有道、搜狗,调用了各大网站的ocr接口,免费不限次数(有道免费接口有ip限制仅供娱乐)。1、对于搜狗的接口调用的还是http://ocr.shouji.sogou.com/v2/ocr/json,这个接口识别效果很好…

html中div中加颜色,css怎样给div加边框颜色

css怎样给div加边框颜色1、css为div四个边分别添加边框border-color:#000(设置4边边框颜色为黑色)border-color:颜色值,即可设置对象边框颜色border-left-color:#000 设置左边框颜色为黑色border-right-color:#000 设置右边框颜色为黑色border-top-color:#000 设置上…

Microsoft Dynamics CRM 前瑞开发

做CRM开发最大的感受就是其前瑞开发过程中,调试起来比较麻烦,需要做一些断点还要配制一些浏览器设置,对新手来说比较困难。还有就是对REST调试,经常为了调试一个正确的结果而花费大量的时间。现在推荐一个REST 工具来调试CRM的前瑞…

割线法求解过程_求解稀疏优化问题2——临近点方法+半光滑牛顿法

这篇文章是我之前一篇文章的兄弟篇,没看过的可以看下面这个。邓康康:求解稀疏优化问题——半光滑牛顿方法​zhuanlan.zhihu.com我们考虑的问题仍然是如下的一般问题:其中 ,并且 特别大;表示一个凸可微函数,例如 表示一…

html 树形图可拖拽,HTML5拖拽API实现vue树形拖拽组件

因业务场景需要一个可拖拽修改节点位置的树形组件,因此动手撸了一个,乘此机会摸了一把html5原生拖拽。近期有时间将核心部分代码抽出,简单说下实现方式。1.树形结构-组件递归使用树形结构非常简单,tree组件作为父组件,…

navicat 或者workbench 无法连接127.0.0.1(61)的解决方法

1、输入mysql -uroot 进入命令行模式, 2、输入"show variables like %sock%;"查看sock文件所在位置 如: 3、配置客户端(以navicat为例) (1)打开mac 下的navicat(2)建立相应的连接&…

jmeter如何定位网络延时_JMeter用户定义变量和properties变量高级使用

Jmeter有个配置元素叫做用户自定义变量(英文名称是UserDefinedVariables)而我们提到的vars即是Variables的简写。 之前我们也说到过Jmeter的脚本中(jsr223sampler或者beanshell编写的脚本)使用varsput和varsget的操作(varsget和put的操作仅在threadgroup测试组线程中执行&#…

html5与跨平台开发,HTML5应用与跨平台应用开发

本课程将总体讲解开发HTML5应用和跨平台应用的方法,共分成三部分。第一部分为HTML5开发基础,带你分析并掌握多种移动开发技术和设计方式;第二部分为HTML5高级应用,讲解在HTML5中调用其它应用或服务的方法;第三部分为跨…

jQuery中的几个模块总结

Query插件,以备并希望在前端方面有所长进。请批评指正。 一,类型判断全解 JQuery判断类型扩展方法:$.type() 1 /*type: function( obj ) { 2 if ( obj null ) { 3 return obj ""; 4 } …