首页 > 编程知识 正文

为什么python总是运行错误,python界面

时间:2023-05-03 12:42:56 阅读:34647 作者:166

###python异常###

1 .异常类型

BaseException的所有异常基类

系统退出解释器请求退出

Exception常见错误的基类

评估错误断言语句失败

属性错误对象不具有此属性

IOError的输入输出操作失败

操作系统错误

WindowsError系统调用失败

ImportError导入模块失败

SyntaxError Python语法错误

2 .异常概念:

如果python解释器在程序运行时遇到错误,程序将停止运行

提示错误的信息是异常的

在我们开发程序的时候,很难用跨度处理所有特殊的东西,因为异常的捕获

通过集中处理突发事件,保证程序的健壮性和稳定性

在程序开发中,不能确定对某个代码的执行时(在程序语法完全正确的前提下) ) ) )。

可以增加try来捕捉异常

try:

要执行的代码

except :

发生错误的处理

''''

try:

#无法确定正确执行的代码

num=int(raw_input (请输入整数) )

except:

print ‘请输入正确的整数! 「

print ‘*‘ * 50

''''

如果这个try,except的语句被评论的话,

代码语法没有问题,但如果编译时发生了错误

错误代码后的语句将不再执行

此语句用于报告错误,但不影响以下代码的执行

''''

3 .捕捉异常的机制

try的工作原理:

执行try语句时,python解释器将标记当前程序流的上下文。 出现异常时,程序流可以根据上下文中的标记返回标记位,从而避免程序退出。

1 .如果在执行try语句时出现异常,程序流将返回标志位,并向下匹配执行与该异常匹配的第一个except语句。 异常处理完成后,程序流将通过整个try语句(异常处理过程中出现新异常时除外)。

2 .如果找不到与异常匹配的except语句(可以使用不指定异常类型或相同异常类型Excrption来捕获异常),则将异常传递到更高的try (如果存在try嵌套),还会找到匹配的except语句如果找不到,请退出程序并打印默认错误消息。)。

3 .如果在执行try语句时没有出现异常,python将执行else语句之后的语句,控制流通过整个try语句

4 .异常预判

根据错误类型捕获异常:

try:

要执行的代码

except错误类型1 :

对错误类型1,进行对应的代码处理

except错误类型2 :

对于错误类型2,进行对应的代码处理

需求:

提示用户输入整数

输出8除以用户输入的整数

代码:

try:

#提示用户输入数量。 如果此代码没有问题,请单击,

#可能是因为用户输入

#因为发生了错误,所以有必要利用异常捕获

num=int(raw_input )“请输入数字:‘)

res=8/num

打印RES

#以下两个预测是知道程序报告错误的操作

except ValueError:

print ‘输入的不是数! 「

except ZeroDivisionError:

print ‘0不能除数! 「

#但是,错误的情况很多,有时无法判断

#这样会发生代码错误

#这种情况我们不想看到

except Exception as result:

print ‘未知错误! %s‘%result

#以下代码是无论有没有异常都要执行的代码

finally:

print ‘无论有无异常都要执行的代码’

#因为使用了异常捕获,所以不影响后面代码的执行

print ‘*‘ * 30

''''

finally的作用(这个语句,能用于什么? )

如果没有垃圾回收机制和结构函数自动调用机制(以析构函数:为对象)

不再使用时自动调用的函数)的语言来说,finally语句非常重要

是的。 这样,程序员就可以确保:无论try块发生了什么,内存总是被释放。 fi

nally可以except同时使用。

注意:

编译器不允许把范围大的异常对象放在前面,假如捕获到了Exception

异常对象,那么就将会停止捕获,而作为其子类的额处理程序就将永远得不到

执行

"""

5.异常的传递

def demo1():

return int(raw_input(‘请输入整数:‘))

def demo2():

return demo1()

# 函数的错误:一级一级的去找,最终会将异常传递到主程序里面

# print demo2()

"""

所以当代码量很多的时候,不需要每一个函数都加异常的捕获

可以直接在最终的主程序加一个捕获

"""

try:

print demo2()

except Exception as result:

print ‘未知错误 %s‘ % result

print ‘*‘ * 50

6.主动抛出异常   触发异常 raise

raise关键字:手动抛出一个通用的异常类型(Exception),raise关键字后面跟异常的名称,异常名称能够标识出异常类的对象.执行raise语句时,python会创建指定异常类的对象

需求:

提示用户输入密码,如果长度小于8,就抛出异常

def input_passwd():

#提示用户输入密码

pwd = raw_input(‘请输入密码‘)

#判断密码的长度是否大于8,大于就返回用户密码

if len(pwd) >= 8:

return pwd

#如果小于8,就主动抛出异常

print ‘主动抛出异常‘

# #创建异常对象

ex = Exception(‘密码长度不够‘)

# #主动抛出异常

raise ex

#注意:只抛出异常而不捕获异常,代码会出错

try:

print input_passwd()

except Exception as result:

print result

7.断言

可以理解为提前预言,让人更好的知道错误的原因

def fun(num, div):

assert (div != 0), ‘div不能为0‘

##如果不添加指定的提示信息 ‘div不能为0‘ 的话,编译会提示 AssertionError 断言语句失败并且不提示失败的原因;添加就相当于提示错误在哪里

return num / div

print fun(10,0)

"""

assert语句触发异常:

assert语句根据后面的表达式的真假来控制程序流

若为True,则往下执行;若为False,则中断程序并调用默认的异常处理

同时输出指定的提示信息

"""

8.捕捉多个异常

(1)方法一:

指定一个通用异常,可以捕获多个不同的包含在Exception类中的异常类

try:

语句块

except Exception:

语句块

(2)方法二:

在一个except句子将多个异常作为元组元素列出

try:

语句块

except (IOError,ValueError):

语句块

(3)方法三:

except句子后不带任何异常异常名称,捕获所有异常

9.自定义异常

通过(直接或者间接)继承Exception类来创建一个自定义异常类,自定义的异常类只能通过raise关键字来手动触发

示例:

#直接继承Exception类

class testError(Exception):

def __init__(self,arg):

self.arg = arg

try:

raise testError(‘just test‘)

except testErro,info:

print info.args

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。