找到 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 块。让我们像这样编写 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 "无法将数据转换为整数。" except: ... 阅读更多
2K+ 次浏览
Argparse 是一个 Python 模块,用于通过定义程序参数、其类型、默认值和帮助消息来创建用户友好的命令行界面。该模块可以处理不同的参数类型,并允许创建具有自己的参数集的子命令。Argparse 生成一个帮助消息,显示可用的选项以及如何使用它们,如果输入无效参数,则会引发错误。总的来说,argparse 简化了 Python 程序健壮的命令行界面的创建。使用 try 和 except 块使用 try 和 except 块处理 argparse 中的无效参数的一种方法。示例在此代码中,... 阅读更多
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_typeOutput子类应实现此方法!
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
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!