(Python)异常处理try...except、raise,你连异常都不会处理,学什么Python?

Python异常处理:


一、try...except

有时候我们写程序的时候,会出现一些错误或异常,导致程序终止。例如,做除法时,除数为0,会引起一个ZeroDivisionError

例子:

1

2

3

4

a=10

b=0

c=a/b

print "done"

运行结果:

Traceback (most recent call last):
File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 3, in <module>
c=a/b
ZeroDivisionError: integer division or modulo by zero

我们发现程序因为ZeroDivisionError而中断了,语句print "done" 没有运行。为了处理异常,我们使用try...except,更改代码:

1

2

3

4

5

6

7

8

a=10

b=0

try:

    c=a/b

    print c

except ZeroDivisionError,e:

    print e.message

print "done"

  

运行结果:

integer division or modulo by zero
done

这样程序就不会因为异常而中断,从而print "done"语句正常执行。

我们把可能发生错误的语句放在try模块里,用except来处理异常。except可以处理一个专门的异常,也可以处理一组圆括号中的异常,如果except后没有指定异常,则默认处理所有的异常。每一个try,都必须至少有一个except

处理一组异常可以这样写(其中e代表异常的实例):

1

2

3

4

try

    pass

except (IOError ,ZeroDivisionError),e:

    print e

try ....except...else 语句,当没有异常发生时,else中的语句将会被执行。

例子:

1

2

3

4

5

6

7

8

9

10

a=10

b=0

try:

    = b/ a

    print c

except (IOError ,ZeroDivisionError),x:

    print x

else:

    print "no error"

print "done"

运行结果:

0
no error
done

二、raise 引发一个异常

例子:如果输入的数据不是整数,则引发一个ValueError

1

2

3

4

5

inputValue=input("please input a int data :")

if type(inputValue)!=type(1):

    raise ValueError

else:

    print inputValue

假设输入1.2,运行结果为:

please input a int data :1.2
Traceback (most recent call last):
File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 3, in <module>
raise ValueError
ValueError

如果输入1,运行结果为:

please input a int data :1
1

三、try ...finally (免费领取Python自动化学习资料  工具,面试宝典面试技巧,加QQ群,785128166,群内还会大佬技术交流)

无论异常是否发生,在程序结束前,finally中的语句都会被执行。

1

2

3

4

5

6

a=10

b=0

try:

    print a/b

finally:

    print "always excute"

运行结果:

Traceback (most recent call last):
always excute
File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 4, in <module>
print a/b
ZeroDivisionError: integer division or modulo by zero

虽然有异常发生,但在程序终止前,finally中的语句也能正常执行。。

finally语句也可以和except语句一起使用。

1

2

3

4

5

6

7

8

a=10

b=0

try:

    print a/b

except:

    print "error"

finally:

    print "always excute"

运行结果:

error

always excute

四、自定义一个异常类

自定义一个MyException类,继承Exception。

1

2

3

4

class MyException(Exception):

    def __init__(self,message):

        Exception.__init__(self)

        self.message=message   

如果输入的数字小于10,就引发一个MyException异常:

1

2

3

4

5

6

a=input("please input a num:")

if a<10:

    try:

        raise MyException("my excepition is raised ")

    except MyException,e:

        print e.message

  

运行结果:

please input a num:1
my excepition is raised

五、python所有的标准异常类:(免费领取Python自动化学习资料  工具,面试宝典面试技巧,加QQ群,785128166,群内还会大佬技术交流)

异常名称描述
BaseException所有异常的基类
SystemExit解释器请求退出
KeyboardInterrupt用户中断执行(通常是输入^C)
Exception常规错误的基类
StopIteration迭代器没有更多的值
GeneratorExit生成器(generator)发生异常来通知退出
SystemExitPython 解释器请求退出
StandardError所有的内建标准异常的基类
ArithmeticError所有数值计算错误的基类
FloatingPointError浮点计算错误
OverflowError数值运算超出最大限制
ZeroDivisionError除(或取模)零 (所有数据类型)
AssertionError断言语句失败
AttributeError对象没有这个属性
EOFError没有内建输入,到达EOF 标记
EnvironmentError操作系统错误的基类
IOError输入/输出操作失败
OSError操作系统错误
WindowsError系统调用失败
ImportError导入模块/对象失败
KeyboardInterrupt用户中断执行(通常是输入^C)
LookupError无效数据查询的基类
IndexError序列中没有没有此索引(index)
KeyError映射中没有这个键
MemoryError内存溢出错误(对于Python 解释器不是致命的)
NameError未声明/初始化对象 (没有属性)
UnboundLocalError访问未初始化的本地变量
ReferenceError弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError一般的运行时错误
NotImplementedError尚未实现的方法
SyntaxErrorPython 语法错误
IndentationError缩进错误
TabErrorTab 和空格混用
SystemError一般的解释器系统错误
TypeError对类型无效的操作
ValueError传入无效的参数
UnicodeErrorUnicode 相关的错误
UnicodeDecodeErrorUnicode 解码时的错误
UnicodeEncodeErrorUnicode 编码时错误
UnicodeTranslateErrorUnicode 转换时错误
Warning警告的基类
DeprecationWarning关于被弃用的特征的警告
FutureWarning关于构造将来语义会有改变的警告
OverflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特性将会被废弃的警告
RuntimeWarning可疑的运行时行为(runtime behavior)的警告
SyntaxWarning可疑的语法的警告
UserWarning用户代码生成的警告
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: try...except...是Python中用于异常处理的语句。当程序出现异常时,try语句块中的代码会被执行,如果出现异常,则会跳转到except语句块中执行相应的代码。通过使用try...except...语句,可以使程序更加健壮,避免因为异常而导致程序崩溃。在Python中,常见的异常类型包括ZeroDivisionError(除数为0)、TypeError(类型错误)、ValueError(数值错误)等。在使用try...except...语句时,可以指定需要捕获的异常类型,也可以使用通配符except来捕获所有异常。 ### 回答2: Python 异常处理try...except... Python 作为一种优秀的编程语言,最不可或缺的就是异常处理机制了。在 Python 编程中,我们经常需要处理一些异常情况,比如输入数据异常、网络通信异常、文件读写异常等等。否则在程序运行中可能会导致程序崩溃或无法正常执行。 Python 提供了 try...except... 语句用来处理程序中可能发生的异常情况。try...except... 语句的基本形式如下: ```python try: # 这里是需要检测的代码 except Exception1: # 如果检测到 Exception1 类型的异常,则执行该模块内的代码 except Exception2: # 如果检测到 Exception2 类型的异常,则执行该模块内的代码 else: # 如果没有检测到异常,则执行该模块内的代码 finally: # 不管有没有异常,都会执行该模块内的代码 ``` 从上面的代码中,我们可以看出 try...except... 语句主要分为 try 模块、except 模块、else 模块和 finally 模块,分别解释如下: 1、try 模块:需要检测的代码块,如果这里出现异常,那么就进入 excepe 模块处理异常。 2、except 模块:处理异常的代码块,如果 try 模块出现异常,则进入该模块尝试处理异常。 3、else 模块:如果 try 模块没有出现异常,那么将执行该模块内的代码。 4、finally 模块:不管有没有出现异常,该模块内的代码都将执行。 其中,Exception1 和 Exception2 是 Python 内置的异常类,根据实际情况可自行选择需要处理异常类型。 综上所述,Python 异常处理try...except... 语句,是 Python 编程中最基本的异常处理机制,它可以帮助我们更好地处理程序中的异常情况,保证程序的稳定性和可靠性。 ### 回答3: Python是一门高级编程语言,使用它可以开发强大的软件和应用程序。然而,所有的程序都存在错误的可能性,导致程序的异常终止,所以在编写Python程序时,一定要注意异常处理Python中定义了一种try...except...的异常处理机制,可以在程序出现错误时捕获并进行处理。如果在执行try语句块时发生异常,程序就会跳转到对应的except语句块来进行处理,然后继续执行程序的其他语句。try语句块内的代码包含可能会出现异常的语句,而except语句块则是用来处理异常的代码。 try-except语句块的基本格式如下: try: #可能会出现异常的代码 except ExceptionType1: #捕获到ExceptionType1类型的异常,执行该块代码 except ExceptionType2: #捕获到ExceptionType2类型的异常,执行该块代码 else: #如果try语句块中没有发生任何异常,则执行该块代码 finally: #无论try...except...是否出现异常,finally子句都会执行。 在Python中,有很多常见的异常类型,比如NameError、TypeError、ZeroDivisionError等等。对于不同的异常类型,我们可以定义相应的处理方式。 除了使用标准的异常类型外,在Python中也可以自定义异常类型。自定义异常类型的方式是通过继承内置的Exception类实现的。例如: class MyException(Exception): #自定义异常类型 pass 在程序中,我们可以通过raise语句来抛出自定义的异常,例如: if condition: raise MyException('error occurred') Python中还提供了异常的链式处理方式,也就是可以在处理异常时,同时抛出一个新的异常异常链式处理的方式是在except块中,直接raise一个新的异常即可。 总之,Python异常处理机制可以有效地避免程序的异常终止,让程序更加健壮。掌握异常处理的方法,可以更好地开发Python程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值