python异常处理
- 格式:pdf
- 大小:132.33 KB
- 文档页数:5
异常处理考试题及答案一、单选题(每题2分,共10分)1. 在Python中,用于捕获异常的关键字是:A. tryB. exceptC. finallyD. raise答案:B2. 下列哪个选项不是Python异常处理的组成部分?A. 异常捕获B. 异常抛出C. 异常处理D. 异常传播答案:D3. 在Python中,哪个关键字用于在异常处理中执行清理代码?A. tryB. exceptC. finallyD. raise答案:C4. 如果在try块中没有发生异常,finally块中的代码是否会执行?A. 是B. 否C. 仅当发生异常时D. 永远不会答案:A5. Python中的异常对象通常包含哪些信息?A. 错误类型和错误消息B. 错误类型、错误消息和堆栈跟踪C. 错误类型、错误消息和错误代码D. 错误类型和错误代码答案:B二、多选题(每题3分,共15分)1. 在Python中,以下哪些是正确的异常处理方式?A. 使用try和except关键字B. 使用try和finally关键字C. 使用try、except和else关键字D. 使用try和raise关键字答案:ABCD2. Python中的哪些关键字可以用来抛出异常?A. tryB. exceptC. raiseD. finally答案:C3. 在Python中,以下哪些是正确的异常处理结构?A. try-exceptB. try-finallyC. try-except-elseD. try-except-finally答案:ACD4. 在Python中,以下哪些是正确的异常处理策略?A. 捕获并处理可能发生的异常B. 忽略所有异常C. 记录异常信息D. 重新抛出异常答案:ACD5. 在Python中,以下哪些是异常对象的属性?A. argsB. messageC. tracebackD. code答案:ABC三、判断题(每题1分,共5分)1. 在Python中,所有的异常都必须被捕获处理。
part7-2Python的异常处理(异常传播轨迹、traceback模块使⽤、异常处理规。
异常对象有提供⼀个 with_traceback ⽤于处理异常的传播轨迹,查看异常的传播轨迹可追踪异常触发的源头,也可看到异常⼀路触发的轨迹。
⽰例如下:1class SelfException(Exception): pass23def main():4 firstMethod()5def firstMethod():6 secondMethod()7def secondMethod():8 thirdMethod()9def thirdMethod():10raise SelfException("⾃定义异常信息")11 main()1213输出信息如下所⽰:14 Traceback (most recent call last):15 File "traceback_test.py", line 15, in <module>16 main()17 File "traceback_test.py", line 8, in main18 firstMethod()19 File "traceback_test.py", line 10, in firstMethod20 secondMethod()21 File "traceback_test.py", line 12, in secondMethod22 thirdMethod()23 File "traceback_test.py", line 14, in thirdMethod24raise SelfException("⾃定义异常信息")25__main__.SelfException: ⾃定义异常信息从上⾯输出可知,异常从 thirdMethod() 函数开始触发,传到 secondMethod() 函数,再传到 firstMethod() 函数,最后传到main() 函数,在 main() 函数终⽌,这个过程就是 Python 的异常传播轨迹。
Python中ignore的用法在Python编程中,ignore是一个常用的关键词,用于忽略或排除特定的操作或事件。
它可以应用于不同的场景,例如异常处理、文件过滤、代码版本控制等。
本文将详细介绍Python中ignore的用法,并结合实例进行说明。
1. 异常处理中的ignore在Python中,异常处理是一种常见的编程技术,用于处理可能出现的错误或异常情况。
有时候,我们希望在捕获异常时忽略特定类型的异常,而不是立即处理它们。
这时,ignore就是一个有用的工具。
下面是一个简单的示例,演示了如何使用ignore忽略特定类型的异常:try:# 可能会引发异常的代码result = 10 / 0except ZeroDivisionError:# 忽略 ZeroDivisionError 异常pass在上面的代码中,我们尝试除以0,这会引发ZeroDivisionError异常。
然而,通过在except语句中使用ignore关键字,我们可以忽略该异常,并继续执行后续的代码。
2. 文件过滤中的ignore在处理文件时,有时候我们需要根据特定的条件来过滤文件,并忽略某些文件。
Python中的ignore可以帮助我们实现这一目标。
下面的示例演示了如何使用ignore来过滤特定类型的文件:import osdef list_files(directory, ignore_extensions):files = os.listdir(directory)for file in files:if file.endswith(tuple(ignore_extensions)):# 忽略指定扩展名的文件continueelse:print(file)在上面的代码中,list_files函数接受一个目录路径和一个包含要忽略扩展名的列表作为参数。
函数遍历目录中的所有文件,并使用endswith方法检查文件的扩展名是否在忽略列表中。
对于Python异常处理慎⽤“except:pass”建议翻译⾃StackOverflow中⼀个关于Python异常处理的问答。问题:为什么“except:pass”是⼀个不好的编程习惯?我时常在StackOverflow上看到有⼈评论关于except: pass的使⽤,他们都提到这是⼀个不好的Python编程习惯,应该避免。可我想知道为什么?有时候我并不在意出现的错误,⽽是只想让我的程序继续进⾏下去。就像这样:
try: somethingexcept: pass
为什么这么使⽤except:pass不好?这背后的原因是什么,是不是因为这样我会放掉⼀些本该被处理的错误?还是这样我会捕获到所有类型的错误?
最佳回答:正如你所猜测的那样,这么做的确有两个不好的地⽅。⾸先,因为没有指定任何异常类型,所以会捕获到任何类型的错误。其次,捕获到错误之后只会简单地让它通过⽽不是采取必要的处理措施。
我接下来的解释或许会有点长,所以将重点总结如下:1. 不要将任意类型的错误作为捕获对象。必须明确你想要捕获的错误类型,并且写明只捕获它们。2. 不要试图简单地敷衍错误处理动作。除⾮这么做是有⽬的的,但这通常都不太好。
那么接下来让我们更深⼊⼀些:不要将任意异常作为捕获⽬标当在代码中的某个地⽅使⽤异常捕获语句块时,你通常知道这个地⽅可能会抛出异常,并且你也知道这个地⽅可能会发⽣什么样的问题进⽽抛出何种异常,⼀旦异常被抛出,你将捕获到这个异常并使程序回到正轨上来。这就意味着你⼀定对这种异常有所准备,并能够在它发⽣的时候及时采取措施进⾏处理。
举个例⼦,你需要⽤户输⼊⼀个数字,并且使⽤int()函数将⽤户输⼊的字符串转换为整数类型,这时候你⼀定会想到如果输⼊的字符串并不是数字,那么就会发⽣值错误(ValueError)。如果真的发⽣了错误,那么你可以通过简单的让⽤户重新输⼊来让程序回到正轨,所以捕获值错误以及促使⽤户重新输⼊就是⼀个⽐较合理的处理策略。再举⼀个例⼦,如果你想从⼀个⽂件中读取配置信息,但正巧这个⽂件不存在。那么因为这是⼀个配置⽂件,如果它不存在你会返回⼀些默认的配置选项,所以这个⽂件就不是这么必要了。在这个例⼦中,捕获⽂件未找到错误(FileNotFoundError)以及返回默认配置项则是⼀个⽐较合适的处理策略。通过以上两个例⼦可以看到,我们都是在等待捕获特定的错误,并且针对每种错误都有特定的处理策略。
python try except的用法Python的try-except语句用于捕获和处理异常。
它允许我们在代码中指定一段需要检查异常的代码,并在发生异常时执行某些操作。
try-except语句的基本语法如下:```pythontry:# 可能会引发异常的代码except ExceptionType1:# 异常类型1的处理代码except ExceptionType2:# 异常类型2的处理代码...except ExceptionTypeN:# 异常类型N的处理代码```以下是try-except语句的一些常用用法:1. 捕获所有异常:可以使用`except Exception`语句来捕获所有类型的异常,并在发生异常时执行相应的代码。
```pythontry:# 可能会引发异常的代码except Exception:# 异常处理代码```2. 捕获多个异常类型:可以使用多个`except`语句来捕获和处理不同类型的异常。
```pythontry:# 可能会引发异常的代码except ExceptionType1:# 异常类型1的处理代码except ExceptionType2:# 异常类型2的处理代码```3. 捕获异常并获取异常信息:可以在`except`语句中使用`as`关键字来捕获异常,并将异常信息赋值给一个变量。
```pythontry:# 可能会引发异常的代码except ExceptionType as e:# 处理异常并使用异常信息print("发生异常:", str(e))```4. 继续执行后续代码:在`except`代码块中处理异常后,如果想要继续执行后续的代码,可以使用`else`子句。
```pythontry:# 可能会引发异常的代码except ExceptionType as e:# 处理异常else:# 异常处理成功后继续执行的代码```5. 最终执行代码:可以使用`finally`子句来指定无论是否发生异常都要执行的代码块。
python里try except用法在Python中,try-except用于捕获和处理异常。
它的基本语法是:```pythontry:#可能会抛出异常的代码块except ExceptionType:#处理异常的代码块```在try代码块中,我们写下可能会抛出异常的代码。
如果在try代码块中发生异常,那么后面的代码将被跳过,而直接进入相应的except代码块中进行异常处理。
在except代码块中,我们可以编写处理异常的逻辑。
可以根据异常的类型进行不同的处理,也可以使用多个except来同时处理不同类型的异常。
如果没有特定的异常类型来处理,也可以使用`Exception`来捕获所有类型的异常。
下面是一个简单的例子,演示如何使用try-except处理异常:```pythontry:num1 = int(input("请输入一个数字:"))num2 = int(input("请再输入一个数字:"))result = num1 / num2print("结果是:", result)except ZeroDivisionError:print("除数不能为0!")except ValueError:print("请输入有效的数字!")else:print("没有发生异常。
")finally:print("程序结束。
")```在上面的例子中,我们尝试将用户输入的两个数字相除,并打印结果。
如果用户输入的数字是0,会抛出`ZeroDivisionError`异常;如果用户输入的不是数字,会抛出`ValueError`异常。
使用try-except可以帮助我们处理这些异常。
另外,还可以在try代码块中使用多个语句,包括嵌套的try-except语句。
这样可以更加灵活地处理各种异常情况。
python中异常处理--raise的使⽤当程序出现错误,python会⾃动引发异常,也可以通过raise显⽰地引发异常。
⼀旦执⾏了raise语句,raise后⾯的语句将不能执⾏。
raise()⽤raise语句来引发⼀个异常。
异常/错误对象必须有⼀个名字,且它们应是Error或Exception类的⼦类。
抛出异常和⾃定义异常Python⽤异常对象(exception object)表⽰异常情况,遇到错误后,会引发异常。
如果异常对象并未被处理或捕捉,程序就会⽤所谓的回溯(Traceback,⼀种错误信息)终⽌执⾏。
raise 语句Python中的raise 关键字⽤于引发⼀个异常,基本上和C#和Java中的throw关键字相同,如下所⽰:def ThorwErr():raise Exception("抛出⼀个异常")# Exception: 抛出⼀个异常ThorwErr()raise关键字后⾯是抛出是⼀个通⽤的异常类型(Exception),⼀般来说抛出的异常越详细越好,Python在exceptions模块内建了很多的异常类型,通过使⽤dir函数来查看exceptions中的异常类型,如下:import exceptions# ['ArithmeticError', 'AssertionError'.....]print dir(exceptions)传递异常捕捉到了异常,但是⼜想重新引发它(传递异常),可以使⽤不带参数的raise语句即可:class MuffledCalculator:muffled = Falsedef calc(self,expr):try:return eval(expr)except ZeroDivisionError:if self.muffled:print 'Division by zero is illegal'else:raise⾃定义异常类型Python中也可以⾃定义⾃⼰的特殊类型的异常,只需要要从Exception类继承(直接或间接)即可:class SomeCustomException(Exception):pass捕捉异常捕捉⼀个异常和C#中的try/catch类似,Python中使⽤try/except关键字来捕捉异常,如下:try:print 2/0except ZeroDivisionError:print '除数不能为0'捕捉多个异常在⼀个except语句只捕捉其后声明的异常类型,如果可能会抛出的是其他类型的异常就需要再增加⼀个except语句了,或者也可以指定⼀个更通⽤的异常类型⽐如:Exception,如下:try:print 2/'0'except ZeroDivisionError:print '除数不能为0'except Exception:print '其他类型异常'为了捕获多个异常,除了声明多个except语句之外,还可以在⼀个except语句之后将多个异常作为元组列出来即可:try:print 2/'0'except (ZeroDivisionError,Exception):print '发⽣了⼀个异常'获取异常信息每个异常都会有⼀些异常信息,⼀般情况下我们应该把这些异常信息记录下来:try:print 2/'0'except (ZeroDivisionError,Exception) as e:# unsupported operand type(s) for /: 'int' and 'str'print efinally⼦句finally⼦句和try⼦句联合使⽤但是和except语句不同,finally不管try⼦句内部是否有异常发⽣,都会执⾏finally⼦句内的代码。
pythontry函数用法
pythontry函数是Python中的一种异常处理机制,可以帮助程序员更好地处理异常情况。
它的使用很简单,在包含可能异常的代码块前面加上try,在try子句内设置异常处理程序,以处理潜在的异常情况,而不会中断程序的执行。
pythontry函数的格式如下:
try:。
<语句1>。
<语句2>。
......
except <异常类型>:。
<处理异常>。
其中:
try:用来定义一个异常处理块,包含可能发生异常的代码。
except:用来捕获并处理异常,可以有多个except语句,每个except语句只能处理指定类型的异常。
如果在try子句之后没有发生异常,则会跳过except子句,继续执行代码。
如果发生了指定类型的异常,则会跳回到except子句,执行异常处理程序。
pythontry函数的优点非常明显,尤其是在处理复杂的程序时,可以让程序员在异常发生时自动执行恰当的处理,而不需要再去查阅文档,从而提高程序处理效率。
所以,使用pythontry函数可以有效地捕获和处理程序中可能发生的异常情况,为程序带来更好的稳定性。
python 中try except 用法详解在Python中,`try`和`except`是用于处理异常(exceptions)的关键字。
异常是在程序执行过程中可能发生的错误或意外情况,例如除以零、访问不存在的索引等。
使用`try`和`except`语句可以使程序在遇到异常时不崩溃,而是执行一些特定的处理代码。
以下是`try`和`except`的基本语法:```pythontry:# 代码块,可能会引发异常的代码# ...except ExceptionType as e:# 异常处理代码# ...```这里是一些关键点的详细解释:1. try块:在`try`块中放置可能引发异常的代码。
2. except块:如果`try`块中的代码引发了指定类型的异常,程序将跳转到`except`块。
`except`块包含用于处理异常的代码。
`ExceptionType`是你想要捕获的异常类型的名称,例如`ZeroDivisionError`、`ValueError`等。
如果你不指定异常类型,`except`块将捕获所有类型的异常。
3. as关键字:在`except`块中,你可以使用`as`关键字为异常指定一个变量名,这样你就可以在`except`块中访问异常对象。
这对于记录异常信息或调试很有用。
下面是一个简单的例子,演示了`try`和`except`的用法:```pythontry:x = int(input("请输入一个数字: "))result = 10 / xprint("结果:", result)except ValueError:print("请输入有效的数字")except ZeroDivisionError:print("不能除以零")except Exception as e:print("发生了异常:", e)finally:print("这里的代码始终会执行")```在这个例子中,用户被要求输入一个数字。
python的try catch用法在Python 中,`try-catch`是用于异常处理的关键字,它们允许编写代码来捕获和处理程序中可能发生的异常情况,以确保程序能够在出现问题时合理地处理它们而不会崩溃。
下面是`try-catch`的基本用法:```pythontry:# 可能会抛出异常的代码# ...passexcept Exception as e:# 异常处理代码# 可以获取异常信息print(f"发生了异常:{e}")```上述代码中,使用`try`关键字后面的代码块来放置可能会抛出异常的代码,如果在`try`代码块中发生了异常,Python 将会跳转到`except`代码块,并执行其中的异常处理代码。
在`except`代码块中,可以通过`as`关键字将异常信息赋值给一个变量,以便在处理异常时获取更多关于异常的信息。
以下是一个完整的示例:```pythontry:# 可能会抛出异常的代码result = 1 / 0except ZeroDivisionError as e:# 异常处理代码print(f"发生了除零异常:{e}")```在这个示例中,尝试执行一个除以零的操作,这会引发一个`ZeroDivisionError`异常。
使用`try-catch`结构可以捕获这个异常,并在`except`代码块中打印出异常信息,以便进行处理。
需要注意的是,`try-catch`只能捕获代码块中发生的异常,如果异常发生在`try`代码块之外,那么它将无法被捕获。
此外,可以使用多个`except`代码块来捕获不同类型的异常,并为每种异常提供相应的处理方式。
python异常处理#!/usr/bin/pythonimport tracebacktry: 1/0#except Exception,e:# print traceback.format_exc()
except Exception as e: print e
#!/usr/bin/pythonimport tracebacktry: 1/0#except Exception,e:# print traceback.format_exc()
except Exception , e: print e
Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。所有异常都从基类Exception继承,而且都在exceptions模块中定义。Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。如果交互式会话遇到一个未被捕捉的SystemExit异常,会话就会终止。
方式一:try语句:1使用try和except语句来捕获异常try: blockexcept [exception,[data…]]: block
try:blockexcept [exception,[data...]]: blockelse: block
该种异常处理语法的规则是:· 执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。· 如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。· 如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。· 如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。· 如果没有发生异常,则执行else块代码。例:try: f = open(“file.txt”,”r”)except IOError, e: print e
捕获到的IOError错误的详细原因会被放置在对象e中,然后运行该异常的except代码块捕获所有的异常try: a=b b=cexcept Exception,ex: print Exception,":",ex
使用except子句需要注意的事情,就是多个except子句截获异常时,如果各个异常类之间具有继承关系,则子类应该写在前面,否则父类将会直接截获子类异常。放在后面的子类异常也就不会执行到了。
2 使用try跟finally:语法如下:try: blockfinally: block
该语句的执行规则是:· 执行try下的代码。· 如果发生异常,在该异常传递到下一级try时,执行finally中的代码。· 如果没有发生异常,则执行finally中的代码。第二种try语法在无论有没有发生异常都要执行代码的情况下是很有用的。例如我们在python中打开一个文件进行读写操作,我在操作过程中不管是否出现异常,最终都是要把该文件关闭的。
这两种形式相互冲突,使用了一种就不允许使用另一种,而功能又各异2. 用raise语句手工引发一个异常:raise [exception[,data]]在Python中,要想引发异常,最简单的形式就是输入关键字raise,后跟要引发的异常的名称。异常名称标识出具体的类:Python异常是那些类的对象。执行raise语句时,Python会创建指定的异常类的一个对象。raise语句还可指定对异常对象进行初始化的参数。为此,请在异常类的名称后添加一个逗号以及指定的参数(或者由参数构成的一个元组)。
例:try: raise MyError #自己抛出一个异常except MyError: print 'a error'
raise ValueError,’invalid argument’捕捉到的内容为:
type = VauleErrormessage = invalid argument
3. 采用traceback(跟踪)模块查看异常 发生异常时,Python能“记住”引发的异常以及程序的当前状态。Python还维护着traceback(跟踪)对象,其中含有异常发生时与函数调用堆栈有关的信息。记住,异常可能在一系列嵌套较深的函数调用中引发。程序调用每个函数时,Python会在“函数调用堆栈”的起始处插入函数名。一旦异常被引发,Python会搜索一个相应的异常处理程序。如果当前函数中没有异常处理程序,当前函数会终止执行,Python会搜索当前函数的调用函数,并以此类推,直到发现匹配的异常处理程序,或者Python抵达主程序为止。这一查找合适的异常处理程序的过程就称为“堆栈辗转开解”(Stack Unwinding)。解释器一方面维护着与放置堆栈中的函数有关的信息,另一方面也维护着与已从堆栈中“辗转开解”的函数有关的信息。
格式:try:blockexcept: traceback.print_exc()
示例:…excpetion/traceback.py4. 采用sys模块回溯最后的异常import systry: blockexcept: info=sys.exc_info() print info[0],":",info[1]或者以如下的形式:import sys tp,val,td = sys.exc_info()
sys.exc_info()的返回值是一个tuple, (type, value/message, traceback)这里的type ---- 异常的类型value/message ---- 异常的信息或者参数traceback ---- 包含调用栈信息的对象。从这点上可以看出此方法涵盖了traceback.5. 异常处理的一些其它用途 除了处理实际的错误条件之外,对于异常还有许多其它的用处。在标准 Python 库中一个普通的用法就是试着导入一个模块,然后检查是否它能使用。导入一个并不存在的模块将引发一个 ImportError 异常。你可以使用这种方法来定义多级别的功能――依靠在运行时哪个模块是有效的,或支持多种平台 (即平台特定代码被分离到不同的模块中)。
你也能通过创建一个从内置的 Exception 类继承的类定义你自己的异常,然后使用 raise 命令引发你的异常。如果你对此感兴趣,请看进一步阅读的部分。
下面的例子演示了如何使用异常支持特定平台功能。代码来自 getpass 模块,一个从用户获得口令的封装模块。获得口令在 UNIX、Windows 和 Mac OS 平台上的实现是不同的,但是这个代码封装了所有的不同之处。
例支持特定平台功能# Bind the name getpass to the appropriate functiontry: import termios, TERMIOS except ImportError: try: import msvcrt except ImportError: try: from EasyDialogs import AskPassword except ImportError: getpass = default_getpass else: getpass = AskPassword else: getpass = win_getpasselse: getpass = unix_getpass
termios 是 UNIX 独有的一个模块,它提供了对于输入终端的底层控制。如果这个模块无效 (因为它不在你的系统上,或你的系统不支持它),则导入失败,Python 引发我们捕捉的 ImportError 异常。
OK,我们没有 termios,所以让我们试试 msvcrt,它是 Windows 独有的一个模块,可以提供在Microsoft Visual C++ 运行服务中的许多有用的函数的一个API。如果导入失败,Python 会引发我们捕捉的ImportError 异常。
如果前两个不能工作,我们试着从 EasyDialogs 导入一个函数,它是 Mac OS 独有的一个模块,提供了各种各样类型的弹出对话框。再一次,如果导入失败,Python 会引发一个我们捕捉的 ImportError 异常。
这些平台特定的模块没有一个有效 (有可能,因为 Python 已经移植到了许多不同的平台上了),所以我们需要回头使用一个缺省口令输入函数 (这个函数定义在 getpass 模块中的别的地方)。注意我们在这里所做的:我们将函数 default_getpass 赋给变量 getpass。如果你读了官方 getpass 文档,它会告诉你 getpass 模块定义了一个 getpass 函数。它是这样做的:通过绑定 getpass 到正确的函数来适应你的平台。然后当你调用 getpass函数时,你实际上调用了平台特定的函数,是这段代码已经为你设置好的。你不需要知道或关心你的代码正运行在何种平台上;只要调用 getpass,则它总能正确处理。
一个 try...except 块可以有一条 else 子句,就像 if 语句。如果在 try 块中没有异常引发,然后 else 子句被执行。在本例中,那就意味着如果 from EasyDialogs import AskPassword 导入可工作,所以我们应该绑定 getpass 到 AskPassword 函数。其它每个 try...except 块有着相似的 else 子句,当我们发现一个import 可用时,就绑定 getpass 到适合的函数。