找到关于 Python 的10786 篇文章
901 次浏览
我们可以编写带有错误代码和错误消息的自定义异常类,如下所示:class ErrorCode(Exception): def __init__(self, code): self.code = code try: raise ErrorCode(401) except ErrorCode as e: print "Received error with code:", e.code 我们得到输出 C:/Users/TutorialsPoint1/~.py Received error with code: 401 我们还可以编写带有参数、错误代码和错误消息的自定义异常,如下所示:class ErrorArgs(Exception): def __init__(self, *args): self.args = [a for a in args] try: raise ErrorArgs(403, "foo", "bar") except ErrorArgs as e: print "%d: %s ... 阅读更多
618 次浏览
问题是 thread_obj.start() 会立即返回。您启动的子线程在其自己的上下文中、在其自己的堆栈中执行。在那里发生的任何异常都在子线程的上下文中。您必须通过传递一些消息将此信息传达给父线程。代码可以改写如下:import sys import threading import Queue class ExcThread(threading.Thread): def __init__(self, foo): threading.Thread.__init__(self) self.foo = foo def run(self): try: raise Exception('An error occurred here.') except Exception: self.foo.put(sys.exc_info()) def main(): foo = Queue.Queue() thread_obj = ExcThread(foo) thread_obj.start() while True: try: exc = foo.get(block=False) except Queue.Empty: pass else: exc_type, ... 阅读更多
242 次浏览
try 块中只有一个 except 子句会被调用。如果您希望在更高层捕获异常,则需要使用嵌套 try 块。让我们编写 2 个 try...except 块,如下所示:try: try: 1/0 except ArithmeticError as e: if str(e) == "Zero division": print ("thumbs up") else: raise except Exception as err: print ("thumbs down") raise err 我们得到以下输出 thumbs down Traceback (most recent call last): File "C:/Users/TutorialsPoint1/~.py", line 11, in raise err File "C:/Users/TutorialsPoint1/~.py", line 3, in 1/0 ZeroDivisionError: division by zero 根据 python 教程,只有一个... 阅读更多
162 次浏览
虽然可以使用如下代码捕获所有异常,但这通常不被推荐:try: #do_something() except: print "Exception Caught!" 但是,这也会捕获我们可能不感兴趣的 KeyboardInterrupt 等异常。除非您立即重新引发异常 - 我们将无法捕获异常:try: f = open('file.txt') s = f.readline() i = int(s.strip()) except IOError as (errno, strerror): print "I/O error({0}): {1}".format(errno, strerror) except ValueError: print "Could not convert data to an integer." except: ... 阅读更多
2K+ 次浏览
Argparse 是一个 Python 模块,用于通过定义程序参数、其类型、默认值和帮助消息来创建用户友好的命令行界面。该模块可以处理不同的参数类型,并允许创建具有自己参数集的子命令。Argparse 生成一个帮助消息,显示可用的选项以及如何使用它们,如果输入无效参数,则会引发错误。总的来说,argparse 简化了为 Python 程序创建强大的命令行界面的过程。使用 try 和 except 块 处理 argparse 中无效参数的一种方法是使用 try 和 except 块。示例 在这段代码中,... 阅读更多
170 次浏览
在 Python 3.x 中,代码受异常链的约束,我们得到的输出如下所示 C:/Users/TutorialsPoint1/~.py Traceback (most recent call last): File "C:/Users/TutorialsPoint1/~.py", line 2, in 1/0 ZeroDivisionError: division by zero 上述异常是以下异常的直接原因:Traceback (most recent call last): File "C:/Users/TutorialsPoint1/~.py", line 4, in raise ValueError ( "Sweet n Sour grapes" ) from e ValueError: Sweet n Sour grapes
1K+ 次浏览
给定的代码被改写为捕获异常 import sys import threading import time import Queue def thread(args1, stop_event, queue_obj): print "start thread" stop_event.wait(12) if not stop_event.is_set(): try: raise Exception("boom!") except Exception: queue_obj.put(sys.exc_info()) pass try: queue_obj = Queue.Queue() t_stop = threading.Event() t = threading.Thread(target=thread, args=(1, t_stop, queue_obj)) t.start() time.sleep(15) print "stop thread!" t_stop.set() try: exc = queue_obj.get(block=False) except Queue.Empty: pass else: exc_type, exc_obj, exc_trace = exc print exc_obj except Exception as e: print "It took too long" 输出 C:/Users/TutorialsPoint1/~.py start thread stop thread! boom! 阅读更多
735 次浏览
OSError 用作 os 模块的错误类,当 os 特定函数返回错误时会引发此错误。我们可以如下重写给定代码以处理异常并了解其类型:#foobar.py import os import sys try: for i in range(5): print i, os.ttyname(i) except Exception as e: print e print sys.exc_type 如果我们在 linux 终端运行此脚本 $ python foobar.py 我们得到以下输出 输出 0 /dev/pts/0 1 /dev/pts/0 2 /dev/pts/0 3 [Errno 9] Bad file descriptor