Python异常之常见的Bug类型解决方法
作者:Python-派大星 发布时间:2022-09-02 15:17:14
一、粗心导致的语法错误SyntaxError
1、input输入报错
age=input('请输入你的年龄:')
if age>=18:
print("成年人做事需要。。。。")
报错:TypeError: '>=' not supported between instances of 'str' and 'int'
因为input输入返回值是字符串所以无法与整数类型数字比较
解决办法: 在input
前面加上int()
,把input输入的数转为整数类型,就可以比较数据了
age=int(input('请输入你的年龄:'))
if age>=18:
print("成年人做事需要。。。。")
2、循环语句报错
while i<10:
print (i)
循环语句报错:错误原因,没有循环变量初始值,也没有循环变量的递增,然后使用括号不规范,使用的中文的括号
解决方法: 添加虚幻变量的初始值,添加循环变量的递增,将不规范的括号改正(使用中文括号)
循环要有三要素:
i=1 #循环变量的起始值
while i < 10: #循环的条件语句
print(i)
i+=1 #变量的递增
3、赋值报错
for i in range(3):
uname =input("请输入用户名:")
upwd=input("请输入密码:")
if uname="admin" and upwd=pwd:
print("登陆成功!")
else
print("输入有误")
else
print("对不起,三次均输入错误")
报错:SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
错误多处:=是赋值,==才是比较,if语句比较时使用了=赋值语句,所以出错,还有就是未定义比较的内容admin然后就是else语句后面未加:
解决方法: 在if语句比较处将=换成==,因为=是赋值,==是比较,还有就是在循环开始前加上用来比较的变量,然后再else语句后加上冒号:
admin="hua"
pwd="123456"
for i in range(3):
uname =input("请输入用户名:")
upwd=input("请输入密码:")
if uname==admin and upwd==pwd:
print("登陆成功!")
else:
print("输入有误")
else:
print("对不起,三次均输入错误")
粗心导致错误的自查宝典:
1、漏了末尾的冒号,如if语句,循环语句,else子句等。
2、缩进错误,该缩进的没缩进,不该缩进的却缩进了。
3、把英文符号写成中文符号没比如说:引号,冒号,括号
4、字符串拼接的时候,把字符串和数字拼接在一起
5、没有定义变量,比如说while的循环条件变量
6、"=="比较运算符和"="赋值运算符的混用
二、知识不熟练导致的错误Bug
1、索引越界问题 IndexError
lst=[11,22,33,44]
print(lst[4])
错误:IndexError: list index out of range 索引越界,虽然有四个数,但索引不是从一开始算,正索引是从0开始算,负索引是从-1开始算
解决办法: 改写为正确的索引
lst=[11,22,33,44]
print(lst[3])
2、append()函数的使用报错
lst=[]
lst=append("A","B","C")
print((lst))
报错:NameError: name 'append' is not defined 错误的方法使用append()函数
解决方法:掌握正确的使用函数的技巧,使用函数不是使用=调用,而是使用.去调用函数,并且append()
函数一次只能增加一个元素
lst=[]
lst.append("A")
lst.append("B")
lst.append("C")
print((lst)) #返回值['A', 'B', 'C']
知识点掌握不熟练的导致的错误,唯一的解决方法就是练练练
三、思路不清晰导致的问题解决方案
1、使用print()函数
将出错的代码用print输出,将有问题的代码注释掉,一步一步的调试,最后将想要的结果输出
2、使用"#"暂时注销部分代码
解决方法:多加练习,掌握基础知识
四、被动掉坑
程序代码逻辑没有错,知识因为用户错误操作或者一些"例外情况"而导致的程序崩溃
被动掉坑问题的解决方案:
python提供了异常处理机制,可以在异常出现时即使补货,然后内部消化,让程序继续运行
异常捕获处理 try: except xxx:语句 xxx为错误类型
try
:用于放入容易出错的代码
except用于处理异常并正常输出后续代码,可以使代码不会报错结束,可以出现多个except语句来处理多种异常类型。
使用方式:
try:
将容易出错的代码放入其中
易出错代码
易出错代码
except 可能出现的类型:
print(捕获异常后用于提示的话语)
except 可能出现的类型:
print(捕获异常后用于提示的话语)
一般代码:
a=int(input("请输入第一个整数:"))
b=int(input("请输入第二个整数:"))
result=a/b
print("结果为:",result)
极容易出现报错,导致终止后面的程序,比如整除不能输入0,不能输入英文,只要输入了,那么就会报错结束程序
所以就需要使用到try: except
try: #将易错代码放进去
a=int(input("请输入第一个整数:"))
b=int(input("请输入第二个整数:"))
result=a/b
print("结果为:",result)
except ZeroDivisionError: #不允许被0除的异常(异常类型在程序报错时会出现,将这种异常类型放入后,出现该异常就会自动处理,而不会报错终止程序)
print("对不起,除数不允许为0") #出现该异常后的提示
except ValueError: #输入异常,int括号里的input只能输入数字串,不能输入字符串
print("只能输入数字串") #出现该异常后的提示
print("程序结束") #程序可能出现的异常都用except写出来了,所以不管出现什么异常,后面的程序一样运行
来源:https://blog.csdn.net/weixin_53466908/article/details/122780023
猜你喜欢
- 对于当前数据库的监控方式有很多,分为数据库自带、商用、开源三大类,每一种都有各自的特色;而对于 mysql 数据库由于其有很高的社区活跃度,
- 作为一个Oracle数据库开发者或者DBA,在实际工作中经常会遇到这样的问题:试图对库表中的某一列或几列创建唯一索引时,系统提示ORA-01
- keras 中fit(self, x=None, y=None, batch_size=None, epochs=1, verbose=1,
- 1.安装虚拟环境虚拟环境是真实python环境的复制版本。安装虚拟环境的命令:1)sudo pip install virtualenv #
- 一、前言在多进程中,每个进程之间是什么关系呢?其实每个进程都有自己的地址空间、内存、数据栈以及其他记录其运行状态的辅助数据。下面通过一个例子
- 本文实例讲述了Python实现快速多线程ping的方法。分享给大家供大家参考。具体如下:#!/usr/bin/python#_*_codin
- Python2.7Mac OS抓取的是电影天堂里面最新电影的页面。链接地址: http://www.dytt8.net/html/gndy/
- AES(英文:Advanced Encryption Standard,中文:高级加密标准),是一种区块加密标准。AES将原始数
- 即以游客身份登录网站时以cookie的方式存储购物车,而以登录用户的身份进入时将购物车信息存储到数据库中去,若是先以游客身份完成购物再登录继
- 本文实例为大家分享了Python smtplib发送邮件功能的具体代码,供大家参考,具体内容如下解决之前版本的问题,下面为最新版#!/usr
- 大数据处理经常要用到一堆表格,然后需要把数据导入一个list中进行各种算法分析,简单讲一下自己的做法:1.如何读取excel文件网上的版本很
- 思考一下下面的代码片段: def foo(numbers=[]): numbers.append(9) p
- 前言Django自带一个用户认证系统,用于处理用户账户、群组、许可和基于cookie的用户会话。Django的认证系统包含了身份验证和权限管
- jQuery 操作 CSSaddClass() - 向被选元素添加一个或多个类removeClass() - 从被选元素删除一个或多个类to
- 一、问题描述使用idea操作代码进行VCS很是方便,向github进行push和pull操作非常方便,但是,最近频繁提示需要重新输入用户名和
- pycharm2019激活码是专门针对与pycharm2019这一款软件而研发的激活码,能够完美激活软件,并且能够支持2019.1版本,理论
- 在上一篇用JS实现图片轮播效果代码(一)的基础上,增加了左右箭头的响应事件,实现了点击左右箭头也可以让图片滚动:js代码如下:window.
- 数组的组合主要有:1.水平组合:np.hstack(arr1,arr2) 或 concatenate(arr1,arr2,axis=1)2.
- AjaxUpload.js文件的代码,供大家参考,具体内容如下/** * AJAX Upload ( http://valums.com/
- 在密码学中,凯撒密码(或称恺撒加密、恺撒变换、变换加密)是一种最简单且最广为人知的加密技术。它是一种替换加密的技术。这个加密方法是以恺撒的名