首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >17个新手常见Python运行时错误

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

作者头像
一墨编程学习
发布于 2019-04-22 03:09:01
发布于 2019-04-22 03:09:01
1K00
代码可运行
举报
运行总次数:0
代码可运行

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if spam == 42 
    print('Hello!') 

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if spam = 42:  
    print('Hello!') 

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print('Hello!')  
    print('Howdy!')  

或者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if spam == 42:  
    print('Hello!')  
  print('Howdy!')  

或者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if spam == 42:  
print('Hello!') 

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spam = ['cat', 'dog', 'mouse']  
for i in range(spam):  
    print(spam[i]) 

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spam = 'I have a pet cat.' 
spam[13] = 'r' 
print(spam) 

而你实际想要这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spam = 'I have a pet cat.' 
spam = spam[:13] + 'r' + spam[14:]  
print(spam) 

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
numEggs = 12 
print('I have ' + numEggs + ' eggs.') 

而你实际想要这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
numEggs = 12 
print('I have ' + str(numEggs) + ' eggs.')  

或者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
numEggs = 12 
print('I have %s eggs.' % (numEggs)) 

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(Hello!')  
或者:  
print('Hello!)  
或者:  
myName = 'Al' 
print('My name is ' + myName + . How are you?') 

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
foobar = 'Al' 
print('My name is ' + fooba)  

或者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spam = ruond(4.2)  

或者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spam = Round(4.2) 

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spam = 'THIS IS IN LOWERCASE.' 
spam = spam.lowerr() 

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spam = ['cat', 'dog', 'mouse']  
print(spam[6]) 

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'}  
print('The name of my pet zebra is ' + spam['zebra']) 

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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需要指定一个有效的初始值。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spam = 0 
spam += 42 
eggs += 42 

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
someVar = 42 
def myFunction():  
    print(someVar)  
    someVar = 100 
myFunction() 

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spam = range(10)  
spam[4] = -1 

也许这才是你想做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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中是没有这样的操作符的。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spam = 1  
spam++ 

也许这才是你想做的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spam = 1 
spam += 1 

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Foo():  
    def myMethod():  
        print('Hello!')  
a = Foo()  
a.myMethod() 

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.04.15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
slave have equal MySQL server UUIDs
    最近在部署MySQL主从复制架构的时候,碰到了"Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs;  these UUIDs must be different for replication to work." 这个错误提示。即主从架构中使用了相同的UUID。检查server_id系统变量,已经是不同的设置,那原因是?接下来为具体描述。 
Leshami
2018/08/13
8330
关于 MySQL GTID 复制
MySQL5.7以后都基本用GTID方式复制了,相对于binlog和position号方式,在failover时候减少很多人工切换操作
星哥玩云
2022/08/18
4760
Mysql主从同步报错解决:Fatal error: The slave I/O thread stops because ..
在搭建Mysql主从架构过程中,由于从服务器是克隆的主服务器系统,导致主从Mysql uuid相同, Slave_IO无法启动,报错如下: Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
非著名运维
2022/06/22
2.6K0
Mysql主从同步报错解决:Fatal error: The slave I/O thread stops because ..
使用Innobackupex快速搭建(修复)MySQL主从架构
    MySQL的主从搭建大家有很多种方式,传统的mysqldump方式是很多人的选择之一。但对于较大的数据库则该方式并非理想的选择。使用Xtrabackup可以快速轻松的构建或修复mysql主从架构。本文描述了使用innobackupex快速来搭建或修复主从架构。供大家参考。
Leshami
2018/08/13
6310
Linux 环境搭建 MySQL8.0.28 主从同步环境
首先在介绍MySQL 主从时,我们来看看 DB-Engines 排行榜上四月数据库的变化,前三甲居然都有小幅度增长,相反增长迅猛的 PG 和 MongoDB 有所减少,一个月的增长趋势说明不了问题,下图是从 13 年开始的趋势图,Oracle 和 MySQL 渐渐趋平,学习了解 MySQL 还是很有必要的。下面开始进入正题。
JiekeXu之路
2022/05/17
1.1K0
Linux 环境搭建 MySQL8.0.28 主从同步环境
CentOS 7.2下MySQL主从复制配置
MySQL的 Replication 是一个异步的复制过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave)。在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master 端。
星哥玩云
2022/08/17
5310
技术分享 | mysqlreplicate 源码分析
1.内置了innodb引擎或者使用了innodb引擎的插件,即为数据库必须有innodb引擎存在
爱可生开源社区
2022/08/23
5710
MySQL基于GTIDs的MySQL Replication
1、GTIDs(Global transaction identifiers)全局事务标识符,是mysql 5.6新加入的一项技术
星哥玩云
2022/08/18
4310
有深度有温度的MySQL主从搭建教程
MySQL 主从搭建一直是以一个很有意思的话题,搭好了很有成就感。松哥之前还专门录过视频教大家搭建 MySQL 主从,一起来回顾下:
江南一点雨
2021/04/22
6370
深入理解MySQL 5.7 GTID系列(二):GTID相关内部数据结构
前一部分是SERVER_UUID,后面一部分是执行事务的唯一标志,通常是自增的。内部使用 GTID这种数据结构表示,后面会描述。
阿炳数记
2019/02/27
1.2K0
深入理解MySQL 5.7 GTID系列(二):GTID相关内部数据结构
10. 选主算法、多版本兼容性及滚动升级 | 深入浅出MGR
本文介绍MGR的选主算法,以及当MGR集群中有多个不同版本混搭时,如何才能正常运行,有什么注意事项。
GreatSQL社区
2022/03/30
5250
MySQL之GTID
GTID,全称Global transaction identifiers,也称之为全局事务ID。MySQL-5.6.2开始支持,MySQL-5.6.10后完善,GTID 分成两部分,一部分是服务的UUid,UUID保存在mysql数据目录的auto.cnf文件中, 这是一个非常重要的文件,不能删除,这一部分是不会变的。下面是一个uuid的值举例:
AsiaYe
2019/11/06
1.2K0
MySQL之GTID
故障案例:主从同步报错Fatal error: The slave I/O thread stops because master and slave have equal MySQL server
场景一:因为数据量非常,大概有1.4T,需要在原先master1-slave1的情况下再创建一个库slave2,并且挂在slave1下,即master1-slave1-slave2的结构。为了方便,当时停掉从库salve1,show master status记录状态,开启log_slave_updates,并且关闭salve1,然后将这个从库的data文件夹直接copy到新的从库,结果在创建slave2和slave1的主从关系时报错
拓荒者
2019/03/11
5K0
安装MySQL Enterprise Monitor
    MySQL Enterprise Monitor是专门为MySQL数据库而设计的一款企业级监控,能非常好地与MySQL各方面特性相结合,包括:MySQL的关键性能指标、主机、磁盘、备份、新特性相关以及各种场景下的架构配置,并支持从单节点到海量节点部署的环境。它不仅能够全面地监控MySQL的运行状态,还能及时发现潜在的问题并给出优化建议。本文描述了MySQL Enterprise Monitor的安装过程。
Leshami
2018/08/13
1.4K0
安装MySQL Enterprise Monitor
【DB宝45】MySQL高可用之MGR+Consul架构部署
基于目前存在很多MySQL数据库单点故障,传统的MHA,PXC等方案用VIP或者DNS切换的方式可以实现、基于数据库的数据强一致性考虑,采用MGR集群,采用consul服务注册发现实现应用端通过动态DNS 访问MGR集群,实现数据库高可用,自动化切换的方案。
AiDBA宝典
2021/03/29
1.3K0
【DB宝45】MySQL高可用之MGR+Consul架构部署
MyCat分库分表实时同步到GreatSQL
MyCat作为经典的分库分表中间件,在长时间内被广泛认为是管理超大MySQL数据库集合的有效解决方案。近来接到客户需求,需要将MyCat集群迁移到GreatSQL中,并且在一段时间内需要实时从MyCat中同步数据到GreatSQL中,全量同步数据比较容易操作,增量同步有如下两个棘手的问题:
GreatSQL社区
2024/01/10
1880
MyCat分库分表实时同步到GreatSQL
【DB宝35】使用MySQL 8.0 克隆(clone)插件快速添加MGR节点
MySQL 8.0.17的克隆插件允许在本地或从远程 MySQL 实例在线克隆数据,从此搭建从库可以不再需要备份工具(PXB或mysqldump)来实现了。克隆数据是存储在 InnoDB 其中的数据的物理快照,其中包括库、表、表空间和数据字典元数据。克隆的数据包含一个功能齐全的数据目录,允许使用克隆插件进行 MySQL 服务器配置。
AiDBA宝典
2021/01/07
2.1K0
【DB宝35】使用MySQL 8.0 克隆(clone)插件快速添加MGR节点
MySQL高可用方案MGR+consul组合测试
今天来简单理一下MGR和consul的组合方案,前期的准备和步骤还是比较多的,晚上完成了基础的调试,来来回回切换了好多次,还算有点意思。
jeanron100
2018/10/24
2.2K0
Kubernetes 部署 MySQL 高可用读写分离
简介: 在有状态应用中,MySQL是我们最常见也是最常用的。本文我们将实战部署一个一组多从的MySQL集群。
小陈运维
2022/06/08
1K0
面试官你好,我已经掌握了MySQL主从配置和读写分离,你看我还有机会吗?
假设各位都已经安装好了 MySQL 数据库,本次操作采用的 MySQL 版本是 5.7.16。正好还有一台 Mac闲着,所以干脆就用两台物理机直接操作了,没有空闲机器的可以在虚拟机操作是一样的。
古时的风筝
2020/07/30
1.1K0
推荐阅读
相关推荐
slave have equal MySQL server UUIDs
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档