Python异常之常见的Bug类型解决方法

目录
  • 一、粗心导致的语法错误SyntaxError
    • 1、input输入报错
    • 2、循环语句报错
    • 3、赋值报错
  • 二、知识不熟练导致的错误Bug
    • 1、索引越界问题 IndexError
    • 2、append()函数的使用报错
  • 三、思路不清晰导致的问题解决方案
    • 1、使用print()函数
    • 2、使用"#"暂时注销部分代码
  • 四、被动掉坑

一、粗心导致的语法错误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写出来了,所以不管出现什么异常,后面的程序一样运行

到此这篇关于Python异常之常见的Bug类型解决方法的文章就介绍到这了,更多相关Python异常解决内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 总结Python使用过程中的bug

    Python使用过程中的bug 问题: 在vscode中, 使用 Windows PowerShell 运行 conda activate xxx (某个环境)切换环境时报错: If using 'conda activate' from a batch script, change your invocation to 'CALL conda.bat activate'. 原因: PowerShell 有时不好使 解决方法: 改为用 cmd 运行 问题: conda install xxxx

  • 浅谈Python在pycharm中的调试(debug)

    作为一名程序员,调试(debug)程序是一项必会的事情,在利用pycharm这个pythonIDE时,不好好利用其调试功能真的是太可惜了. 借用这两天学习机器学习的工程. 在Deep_Learing工程中创建两个python文件,其中执行程序的文件名称为main.py,另一个KNN.py则是机器学习中一个小的模块,其中有算法代码. 在main.py中这样编写: 最关键的是写出 if __name__ == "__main__": 这句代码,这句代码代表主函数运行的入口,在其中写要进行测

  • Python和Ruby中each循环引用变量问题(一个隐秘BUG?)

    虽然这个问题我是在 Python 里遇到的,但是用 Ruby 解释起来比较容易一些.在 Ruby 里,遍历一个数组可以有很多种方法,最常用的两种无非是 for 和 each: 复制代码 代码如下: arr = ['a', 'b', 'c'] arr.each { |e|  puts e} for e in arr  puts eend 通常我比较喜欢后者,似乎因为写起来比较好看,不过从效率上来说前者应该会稍微快一点,因为后者实际上是在遍历的过程中对每个元素都调用一个 lambda 函数来做的,虽

  • 解决在Python编辑器pycharm中程序run正常debug错误的问题

    初学Python,写了一小段程序,在pycharm中debug一直报错,在网上搜了很久,尝试多种方法后还是没有用. 尝试了很久之后,发现这个问题是由于: 1.程序中有中文注释. 2.程序保存路径有中文. 最终我的解决方法是设置pycharm的编码方式.进入file>setting,在输入框搜索encoding 把GBK设置成UTF-8,再重启软件就OK了! 以上这篇解决在Python编辑器pycharm中程序run正常debug错误的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希

  • python开启debug模式的方法

    python开启debug模式的代码如下所示: import requests session = requests.session() import logging import requests logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S'

  • Python异常之常见的Bug类型解决方法

    目录 一.粗心导致的语法错误SyntaxError 1.input输入报错 2.循环语句报错 3.赋值报错 二.知识不熟练导致的错误Bug 1.索引越界问题 IndexError 2.append()函数的使用报错 三.思路不清晰导致的问题解决方案 1.使用print()函数 2.使用"#"暂时注销部分代码 四.被动掉坑 一.粗心导致的语法错误SyntaxError 1.input输入报错 age=input('请输入你的年龄:') if age>=18:     print(&

  • Python读取excel中的图片完美解决方法

    excel中有图片是很常见的,但是通过python读取excel中的图片没有很好的解决办法. 网上找了一种很聪明的方法,原理是这样的: 1.将待读取的excel文件后缀名改成zip,变成压缩文件. 2.再解压这个文件. 3.在解压后的文件夹中,就有excel中的图片. 4.这样读excel中的图片,就变成了读文件夹中的图片了,和普通文件一样,可以做各种处理. 解压后的压缩包如下: python脚本如下: ''' File Name: readexcelimg Author: tim Date:

  • vue中常见的问题及解决方法总结(推荐)

    有一些问题不限于 Vue,还适应于其他类型的 SPA 项目. 1. 页面权限控制和登陆验证页面权限控制 页面权限控制是什么意思呢? 就是一个网站有不同的角色,比如管理员和普通用户,要求不同的角色能访问的页面是不一样的.如果一个页面,有角色越权访问,这时就得做出限制了. 一种方法是通过动态添加路由和菜单来做控制,不能访问的页面不添加到路由表里,这是其中一种办法.具体细节请看下一节的<动态菜单>. 另一种办法就是所有的页面都在路由表里,只是在访问的时候要判断一下角色权限.如果有权限就允许访问,没有

  • pip安装Python库时遇到的问题及解决方法

    笔者电脑系统是win7,同时安装了Python2.7和Python3.6,但是在通过命令行直接使用"pip install XXX"安装Python库时出现了以下的错误信息: Fatal error in launcher: Unable to create process using '"' 解决方法: 1,找到你的Python版本对应的解释器的名称 首先你需要进入安装Python相应版本所在的文件夹.以我的Python版本为例,这是我的Python2.7版本对应的解释器名

  • java中常见的死锁以及解决方法代码

    在java中我们常常使用加锁机制来确保线程安全,但是如果过度使用加锁,则可能导致锁顺序死锁.同样,我们使用线程池和信号量来限制对资源的使用,但是这些被限制的行为可能会导致资源死锁.java应用程序无法从死锁中恢复过来,因此设计时一定要排序那些可能导致死锁出现的条件. 1.一个最简单的死锁案例 当一个线程永远地持有一个锁,并且其他线程都尝试获得这个锁时,那么它们将永远被阻塞.在线程A持有锁L并想获得锁M的同时,线程B持有锁M并尝试获得锁L,那么这两个线程将永远地等待下去.这种就是最简答的死锁形式(

  • python多线程调用exit无法退出的解决方法

    python启用多线程后,调用exit出现无法退出的情况,原因是exit会抛出Systemexit的异常,如果在exit外围调用了try,就会出现ctrl+c两次才能退出的情况 解决方法: thread.setDaemon(True) thread.start() 线程启动前设置setDaemon(True) 以上这篇python多线程调用exit无法退出的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 详解Java中NullPointerException异常的原因详解以及解决方法

    NullPointerException是当您尝试使用指向内存中空位置的引用(null)时发生的异常,就好像它引用了一个对象一样. 当我们声明引用变量(即对象)时,实际上是在创建指向对象的指针.考虑以下代码,您可以在其中声明基本类型的整型变量x: int x; x = 10; 在此示例中,变量x是一个整型变量,Java将为您初始化为0.当您在第二行中将其分配给10时,值10将被写入x指向的内存中. 但是,当您尝试声明引用类型时会发生不同的事情.请使用以下代码: Integer num; num

  • python反扒机制的5种解决方法

    前言 反爬虫是网站为了维护自己的核心安全而采取的抑制爬虫的手段,反爬虫的手段有很多种,一般情况下除了百度等网站,反扒机制会常常更新以外.为了保持网站运行的高效,网站采取的反扒机制并不是太多,今天分享几个我在爬虫过程中遇到的反扒机制,并简单介绍其解决方式. 基于User-Agent反爬 简介:服务器后台对访问的User_Agent进行统计,单位时间内同一User_Agent访问的次数超过特定的阀值,则会被不同程度的封禁IP,从而造成无法进行爬虫的状况. 解决方法: 一 . 将常见的User-Age

  • python提示No module named images的解决方法

    本文讲述了python提示No module named images的解决方法,非常实用!分享给大家供大家参考.具体方法如下: 出现提示:ImportError: No module named images 表示找不到images模块 可将: import images 替换为: import wx.py.images as images 将: images.getNewBitmap 替换为: images.getPyBitmap() 即可解决问题. 希望本文所述对大家的Python程序设计

  • MySQL常见错误有哪些_MySQL常见错误的快速解决方法

    1. TokuFT file system space is really low and access is restricted 解决方法:修改tokudb_fs_reserve_percent参数,不过该参数是静止参数,需重启实例 2. 以上这篇MySQL常见错误有哪些_MySQL常见错误的快速解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

随机推荐