在Python中,有许多可以被各种标准库函数(当然还有其他代码)抛出。由于许多原因,可能会引发特定的异常,您可能希望了解抛出异常是否出于特定原因。
例如,在Windows中,如果您试图在文件被另一个进程锁定时移动它,您可能会得到一个PermissionError
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\Path\\to\\the\\file'
在我的例子中,我想确定抛出Permission
在python 3中,我如何忽略要向调用方引发的某个异常?
示例:
def do_something():
try:
statement1
statement2
except Exception as e:
# ignore the exception
logging.warning("this is normal, exception is ignored")
try:
do_something()
except Exception as e:
# this is unexpe
在Java世界中,我们知道异常被分类为checked vs runtime,当某个东西抛出一个checked异常时,该东西的调用者将被迫以某种方式处理该异常。因此,调用者将很好地意识到存在异常的事实,并准备/编写代码来处理该异常。
但是对于Python,如果没有检查异常的概念(我希望这是正确的),那么调用某些东西的人如何知道该东西是否会抛出异常呢?考虑到这种“对可能抛出异常的知识的缺乏”,调用者如何知道它可以处理异常,直到为时已晚?
boost-python不能够捕获在使用它的帮助编写的扩展模块中抛出的异常并将其转换为python的原因是什么?相反,解释器使用terminate called after throwing an instance of '<some_excpetion_class>'崩溃。
我的扩展模块使用了CGAL的一些函数,它与CGAL动态链接,并抛出异常。它还动态地链接到boost_python共享库。我在linux上。它是用'-std=c++11'编写的,我更喜欢用clang编译。
我的第一个想法是,这是一个在共享库边界上抛出异常的问题。然而,我做了我所能
在Python中,捕获“所有”异常的最佳方法是什么?
except: # do stuff with sys.exc_info()[1]
except BaseException as exc:
except Exception as exc:
捕获可以在线程中执行。
我的目标是记录普通代码可能抛出的任何异常,而不屏蔽任何特殊的Python异常,例如那些指示进程终止等的异常。
还需要获得异常的句柄(例如通过上面包含exc的子句)。
我目前正在使用python的concurrent.futures库运行一个函数。如下所示(我使用的是Python 3.10.1 ):
with concurrent.futures.ThreadPoolExecutor() as executor:
future_results = [executor.submit(f.get_pdf_multi_thread, ssn) for ssn in ssns]
for future in concurrent.futures.as_completed(future_results):
try:
假设我想比较两个具有不同数据类型的变量: string和int。我在Python 2.7.3和Python 3.2.3中都测试过它,都没有抛出异常。比较的结果是False。在这种情况下,我可以用不同的选项配置或运行Python来抛出异常吗?
ks@ks-P35-DS3P:~$ python2
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for