盘点学习Python常犯一些错误,你中了几个

在这里插入图片描述
对于刚入门的 Pythonista 在学习过程中运行代码是或多或少会遇到一些错误,刚开始可能看起来比较费劲。随着代码量的积累,熟能生巧当遇到一些运行时错误时能够很快的定位问题原题。下面整理了一些常见的 17 个错误,等你写出的代码不怎么出现这些错误的时候,你的 Python 功力就上一个台阶了。换一句话说,当你成为一名合格的 Python 开发者后,你可能 “ 都写不出 ” 这类的错误。

1.忘记在 if,for,def,elif,else,class 等声明末尾加 :
会导致“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!’)
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()
看完了之后,相信你如果每天都在撸 Python 的话,上面的错误几乎都很少犯了。

最后说说你有哪些还会常犯的错误呢?

来和小伙伴们一起向上生长呀!

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

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

相关文章

测试工具链

缺陷管理 bug管理工具 devops---项目管理--缺陷管理 bug管理地址 https://devsecops.mychery.com:8443/chery/project?filterROLE&statusACTIVE bug管理环境 采用公司的devops平台,对每个项目的bug进行管理。目前在使用 接口测试和服务端性能测试 工具…

HBase数据库面试知识点:第一部分 - 基础概念与特点(持续更新中)

目录 一、HBase基础概念 1. HBase定义 2. 核心组件 3. HBase的特点 二、HBase与传统RDBMS的区别 1. 数据类型 2. 数据操作 3. 存储方式 4. 伸缩性 5. 事务性 三、HBase数据模型 四、HBase的特点 五、HBase与Hadoop生态系统的关系 一、HBase基础概念 1. HBase定义 …

C++对CSV文件进行读,写,追加操作

1.读取CSV文件 // 读取csv文件 void read_csv(const std::string& file_path) {std::cout<<"文件路径: "<< file_path<<"\n";std::ifstream csv_data(file_path, std::ios::in);std::string line;if (!csv_data.is_open()) {std::c…

斯坦福抄袭清华、面壁智能大模型,当事人已道歉、删项目

6月4日&#xff0c;两名斯坦福大学生Aksh Garg和Siddharth Sharma&#xff0c;承认抄袭清华和面壁智能联合开发的MiniCPM-Llama3-V2.5&#xff08;以下简称V2.5&#xff09;多模态大模型事件&#xff0c;并在社交平台公开道歉、删掉开源项目。 该抄袭事件也得到了斯坦福大学AI…

阿里云计算之linux入门命令学习笔记(二)

Linux 提供了丰富的命令行工具&#xff0c;用于系统管理、文件操作、网络管理、进程控制等。以下是一些常用的 Linux 命令及其简要说明&#xff1a; 切换用户 su 命令 su (substitute user) 命令用于切换用户。 su - username # 切换到指定用户&#xff0c;并加载…

【python】成功解决“ImportError: cannot import name ‘triu’ from ‘scipy.linalg’”错误的全面指南

成功解决“ImportError: cannot import name ‘triu’ from ‘scipy.linalg’”错误的全面指南 在Python编程中&#xff0c;尤其是在使用scipy这个科学计算库时&#xff0c;可能会遇到ImportError错误&#xff0c;提示无法从scipy.linalg模块中导入名为triu的函数。这个错误通…

程序员职业生涯中的重要职业素养

程序员应该有什么职业素养&#xff1f; 作为一名程序员&#xff0c;职业素养在日常工作中至关重要。这不仅关系到个人职业发展的成功&#xff0c;也影响团队的整体效率和项目的成功。以下是几项对程序员而言尤为重要的职业素养&#xff1a; 1. 技术能力与学习能力 持续学习&…

浏览器原理---进程与线程

1、进程与线程的概念 从本质上说&#xff0c;进程和线程都是 CPU 工作时间片的一个描述&#xff1a; 进程描述了 CPU 在运行指令及加载和保存上下文所需的时间&#xff0c;放在应用上来说就代表了一个程序。线程是进程中的更小单位&#xff0c;描述了执行一段指令所需的时间。…

过滤器:Vue.js允许你自定义过滤器,可用于常见的文本格式化。过滤器可以用在两个地方:mustache插值和v-bind表达式

简介 Vue.js过滤器的概念 在Vue.js中,过滤器是一些用于处理和转换文本的函数。它们可以用在模板中的两个地方:mustache插值和v-bind表达式。过滤器应该被添加在JavaScript表达式的尾部,由“管道”符号表示。 过滤器的作用和优点 过滤器的主要作用是在不改变原始数据的…

Unity3D Delaunay德罗内三角算法详解

Unity3D是一款强大的游戏开发引擎&#xff0c;它提供了丰富的功能和工具&#xff0c;使开发者能够轻松创建出色的游戏和应用程序。其中&#xff0c;Delaunay德罗内三角算法是一种常用的计算几何算法&#xff0c;用于生成三角形网格&#xff0c;其在Unity3D中的应用也非常广泛。…

探索Linux中的rename命令:强大的文件名重命名工具

探索Linux中的rename命令&#xff1a;强大的文件名重命名工具 在Linux系统中&#xff0c;处理文件和目录时&#xff0c;经常需要对文件或目录进行重命名。虽然基本的mv命令可以用于此目的&#xff0c;但在面对需要按照特定模式进行批量重命名时&#xff0c;mv命令就显得有些力…

ROS系列rqt的安装以及使用方法介绍

目录 1. 安装 2. 部分工具的功能介绍及使用方法 1&#xff09;rqt_gui 2&#xff09;rqt_topic 3&#xff09;rqt_graph 4&#xff09;qt_plot 5&#xff09;rqt_service_caller 6&#xff09;rqt_bag 1. 安装 安装极其简单&#xff0c;不多介绍&#xff0c;直接上命令…

EDI系统的使用场景

EDI全称Electronic Data Interchange&#xff0c;中文名称是电子数据交换。EDI系统是专为企业间的电子数据传输而设计的&#xff0c;需要满足的基本功能包括&#xff1a;支持AS2、OFTP、SFTP等EDI传输协议&#xff0c;能够生成和解析符合X12、EDIFACT、VDA等EDI报文标准下的报文…

反向海淘代购系统中的API接口列表

API测试入口|代购系统演示 item_get 获得淘宝商品详情item_get_pro 获得淘宝商品详情高级版item_review 获得淘宝商品评论item_fee 获得淘宝商品快递费用item_password 获得淘口令真实urlitem_list_updown 批量获得淘宝商品上下架时间seller_info 获得淘宝店铺详情item_search…

CrossPrefetch: Accelerating I/O Prefetching for Modern Storage——论文泛读

ASPLOS 2024 Paper 论文阅读笔记整理 问题 目前计算设备和存储设备之间的性能差距仍然很大。因此&#xff0c;主内存缓存和缓冲区被广泛用于操作系统、用户级文件系统[32]和I/O运行时&#xff0c;在隐藏性能差距和减少I/O瓶颈方面发挥关键作用[23&#xff0c;26&#xff0c;3…

python运算符和表达式

目录 算数运算符 赋值运算符 关系运算符 逻辑运算符 位运算符 成员运算符 运算符优先级 易错点&#xff1a; 算数运算符 赋值运算符 关系运算符 int可以转换成float 逻辑运算符 可以是一个运算也可以是一个字符串 左边为空格&#xff0c;为假&#xff0c;输出为空 优…

[React]用 flushSync 同步更新 state

参考&#xff1a;使用 ref 操作 DOM – React 中文文档 同时操作state和ref的情况还是有的&#xff0c;按我的原来的处理肯定是使用setTimeout了&#xff0c;看到官方有解决方案&#xff0c;摘录下来以便查看。 源代码就不完整贴了&#xff0c;直接看问题代码块&#xff1a; …

MySQL中获取时间的方法

大家好&#xff0c;在MySQL数据库开发中&#xff0c;获取时间是一个常见的需求。MySQL提供了多种方法来获取当前日期、时间和时间戳&#xff0c;并且可以对时间进行格式化、计算和转换。 以下是一些常用的MySQL时间函数及其示例&#xff1a; 1、NOW()&#xff1a;用于获取当前…

Mysql:通过一张表里的父子级,递归查询并且分组分级

表&#xff1a;gc_jzst_single_base 需求&#xff1a;要求返回这张表里符合条件的数据&#xff0c;且有父子级关系的&#xff0c;展示为同一组且分级&#xff0c;给后续业务调用 代码 WITH RECURSIVE t1 AS (SELECTsingle_id,old_build_single_id,single_name,bulid_code,1 A…

Mybatis Map接收数据tinyint(1)类型错误

Mybatis Map接收数据tinyint 1 类型错误 问题描述数据库字段Mybatis查询语句问题处理方案一方案二方案三 问题描述 Mybatis开发过程中&#xff0c;使用Map接收返回数据时发现tinyint(1)类型字段自动转换成了Boolean类型&#xff0c;导致查询的数据出现问题 数据库字段 数据库…