找到 34423 篇文章,关于编程
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 块。让我们编写两个这样的 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 "无法将数据转换为整数。" 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"OUTPUTC:/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我们将得到以下输出OUTPUT0 /dev/pts/0 1 /dev/pts/0 2 /dev/pts/0 3 [Errno 9] Bad file descriptor
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_type输出子类应该实现这个!
4K+ 次查看
当无法导入模块或模块的成员时,会引发 ImportError。ImportError 可能在两种情况下引发。如果模块不存在。示例import sys try: from exception import myexception except Exception as e: print e print sys.exc_type输出No 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
2K+ 次查看
在 python 文档中,SystemExit 不是 Exception 类的子类。BaseException 类是 SystemExit 的基类。因此,在给定的代码中,我们将 Exception 替换为 BaseException 以使代码工作示例try: raise SystemExit except BaseException: print "It works!"输出It works!该异常继承自 BaseException 而不是 StandardError 或 Exception,因此不会被意外地被捕获 Exception 的代码捕获。我们最好这样编写代码示例try: raise SystemExit except SystemExit: print "It works!"输出It works!