找到 34423 篇文章 关于编程

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

Manogna
更新于 2019-09-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-09-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-09-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 "无法将数据转换为整数。" except:     ... 阅读更多

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

Rajendra Dharmkar
更新于 2023-08-10 21:09:39

2K+ 次浏览

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

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

Rajendra Dharmkar
更新于 2019-09-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-09-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"OUTPUTC:/Users/TutorialsPoint1/~.py start thread stop thread! boom!阅读更多

如何在 Python 中捕获 OSError 异常?

Rajendra Dharmkar
更新于 2019-09-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我们得到以下输出OUTPUT0 /dev/pts/0 1 /dev/pts/0 2 /dev/pts/0 3 [Errno 9] Bad file descriptor

如何在 Python 中捕获 NotImplementedError 异常?

Rajendra Dharmkar
更新于 2020-02-12 10:36:48

1K+ 次浏览

用户定义的基类可以引发 NotImplementedError 来指示方法或行为需要由子类定义,从而模拟接口。此异常派生自 RuntimeError。在用户定义的基类中,当抽象方法需要派生类重写该方法时,应引发此异常。示例import sys try:    class Super(object):         @property         def example(self):             raise NotImplementedError("子类应实现此方法!")    s = Super()    print s.example except Exception as e:     print e     print sys.exc_typeOutput子类应实现此方法!

如何在 Python 中捕获 ImportError 异常?

Rajendra Dharmkar
更新于 2020-06-12 07:42:03

4K+ 次浏览

当无法导入模块或模块的成员时,会引发 ImportError。在两种情况下可能会引发 ImportError。如果模块不存在。示例import sys try:     from exception import myexception except Exception as e:     print e     print sys.exc_typeOutputNo module named exception 如果使用 from X import Y 并且在模块 X 中找不到 Y,则会引发 ImportError。示例 import sys  try:     from time import datetime  except Exception as e:     print e     print sys.exc_typeOUTPUT cannot import name datetime

如何在 Python 中捕获 SystemExit 异常?

Rajendra Dharmkar
更新于 2020-02-12 10:39:46

2K+ 次浏览

在 python 文档中,SystemExit 不是 Exception 类的子类。BaseException 类是 SystemExit 的基类。因此,在给定的代码中,我们将 Exception 替换为 BaseException 以使代码工作示例try: raise SystemExit except BaseException: print "It works!"OutputIt works!该异常继承自 BaseException 而不是 StandardError 或 Exception,以便不会被意外地捕获捕获 Exception 的代码。我们最好这样编写代码示例try: raise SystemExit except SystemExit: print "It works!"OutputIt works!

广告