找到关于 Python 的10786 篇文章

如何使用错误代码和错误消息编写自定义 Python 异常?

Rajendra Dharmkar
更新于 2019年9月27日 11:23:45

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 ... 阅读更多

建议一种更清晰的处理 Python 异常的方法?

Manogna
更新于 2019年9月27日 11:24:37

138 次浏览

我们可以使用 finally 子句进行清理,无论是否抛出异常:try:   #一些代码 here except:   handle_exception() finally:   do_cleanup() 如果要在发生异常时进行清理,我们可以这样编写代码:should_cleanup = True try:   #一些代码 here   should_cleanup = False except:   handle_exception() finally:   if should_cleanup():     do_cleanup()

如何在使用 Python 'with' 语句时捕获异常?

Manogna
更新于 2019年9月27日 11:25:28

82 次浏览

代码可以改写为捕获异常,如下所示:try:      with open("myFile.txt") as f:           print(f.readlines()) except:     print('No such file or directory') 我们得到以下输出 C:/Users/TutorialsPoint1/~.py No such file or directory

如何在 Python 中在调用线程中捕获线程的异常?

Manogna
更新于 2019年9月27日 11:26:40

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, ... 阅读更多

如何在 Python 中在一个 except 块中引发异常,并在后面的 except 块中捕获它?

Manogna
更新于 2019年9月27日 11:27:53

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 教程,只有一个... 阅读更多

如何编写捕获所有 Python 异常的 try/except 块?

Manogna
更新于 2019年9月27日 11:29:24

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:     ... 阅读更多

如何在 Python 中使用 argparse 处理无效参数?

Rajendra Dharmkar
更新于 2023年8月10日 21:09:39

2K+ 次浏览

Argparse 是一个 Python 模块,用于通过定义程序参数、其类型、默认值和帮助消息来创建用户友好的命令行界面。该模块可以处理不同的参数类型,并允许创建具有自己参数集的子命令。Argparse 生成一个帮助消息,显示可用的选项以及如何使用它们,如果输入无效参数,则会引发错误。总的来说,argparse 简化了为 Python 程序创建强大的命令行界面的过程。使用 try 和 except 块 处理 argparse 中无效参数的一种方法是使用 try 和 except 块。示例 在这段代码中,... 阅读更多

如何使用新的类型重新抛出 Python 异常?

Rajendra Dharmkar
更新于 2019年9月27日 11:33:50

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

如何在线程中处理 Python 异常?

Rajendra Dharmkar
更新于 2019年9月27日 11:35:03

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! 阅读更多

如何在 Python 中捕获 OSError 异常?

Rajendra Dharmkar
更新于 2019年9月27日 11:36:21

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

广告