python3 中try 异常调试 raise 异常抛出

一、什么是异常?
异常是在程序执行过程中发生的事件,影响程序的正常执行。
一般情况下,当Python无法正常处理程序时,会出现异常。
异常是Python对象,表示错误。
当Python脚本异常时,我们需要捕获并处理它,否则程序将终止执行。
常见异常
#Attributeror调用不存在的方法引起的异常 #EOFEror遇到文件末尾引起的异常 #Importeror导入模块错误引起的异常 #Indexeror列表月越界引起的异常 #IOErrorI/O操作引起的异常,如打开文件出错等 #KeyEror使用字典中不存在的关键字引起的异常 #Nameerror使用不存在的变量名引起的异常 #Taberor语句块缩进不正确引起的异常 #Valueerror搜索列表中没有值引起的异常 #ZeroDivisionEror除数为零引起的异常
二、基础异常处理
try/except语句可用于捕捉异常,见下例。
try/except语句用于检测try语句块中的错误,使except语句捕获异常信息并处理。
如果你不想在异常情况下结束你的程序,只需要在try中捕获它。
try的工作原理是,当一个try句子开始时,python会在当前程序的上下文中标记,这样当异常出现时,你就可以回到这里。try句子(except等。)首先执行,然后依赖于执行是否异常。
如果try后的句子在执行过程中出现异常,python将跳回try并执行第一个与异常相匹配的except句子。异常处理后,控制流通过整个try句子(除非在处理异常时出现新的异常)。
如果try后的句子中出现异常,但没有匹配的except句子,异常将提交给上层try或程序的上层(这将结束程序并打印缺失的错误信息)。
如果try子句执行时没有异常,python将执行else语句后的语句(如果有else)控制整个try语句的流通。
无论try是否有异常抛出,都会执行本级try对应的finally。
基础语法
try: exceptttt检测异常代码段: 执行代码段elseese发生异常后: 代码段finally没有异常执行: 最终执行代码段
例如
print("test1")
try:
s=input()
ifsisNone:
print("s是空对象")
print(len(s))#这句话抛出了异常
exceptTypeError:
print("错误类型的空对象没有长度")
else:
print("noproblem")
finally:
print('endtest1')三、捕获异常操作
为能捕捉异常,"except"句子必须使用相同的异常来抛出类对象或字符串。
3.1 使用except而不使用任何异常类型
您可以使用except而不使用任何异常类型,以下例子捕获try-except语句中发生的所有异常。但这不是一个很好的方法,我们不能通过这个程序识别特定的异常信息。因为它捕获了所有的异常。
print("test2")
try:
x=1
y=0
z=x/y
except:#捕获所有异常
print('thereisproblem')
else:
print('noproblem')
finally:
print('endtest2')使用except带来多种异常类型
您还可以使用相同的except语句来处理多个异常信息,这些异常将被放置在一个括号中成为一个元组,如下所示:
try: except(exception1[,exception2[,...ExceptionN]]]): 发生上述异常之一,执行此代码elsee: 如果代码没有异常执行,则该代码没有异常执行此代码
print('test3')
try:
x=1
y=0
z=x/y
except(NameError,ZeroDivisionError):
print("problemis(NameError,ZeroDivisionError)")
except(RuntimeError,TypeError):
print("problemis(RuntimeError,TypeError)")
except:
print("problem")
raise
else:
print("noproblem")
finally:
print('endtest3')最后一个except句子可以忽略异常名称,它将被用作通配符。您可以用这种方法打印错误的信息,然后再次抛出异常。
importsys
try:
f=open('myfile.txt')
s=f.readline()
i=int(s.strip())
#exceptOSErroraserr:
#print("OSerror:{0}".format(err))
exceptValueError:
print("Couldnotconvertdatatoaninteger.")
except:
print("Unexpectederror:",sys.exc_info()[0])
foriinsys.exc_info():
print(i)
raiseException('linexxx')
finally:
print("end") 