Python - 是否可以强制引发异常,无视try/except块?
在Python中,有没有什么语言特性或者解释器的功能,可以强制Python解释器在任何情况下都抛出异常,即使这些出错的代码是在try/except块里面?
我最近接手了一份比较大且比较旧的Python代码,这段代码的目的是与我们自己开发的一些定制硬件进行通信。由于以下这种(简化的)代码模式,很多通信错误和超时问题都被隐藏了,没能被发现:
try:
serialport.write(MSG)
except:
some_logging_function_mostly_not_working_that_might_be_here_or_not()
#or just:
#pass
为了避免“从头开始重写整个代码”的这种典型情况,我现在正在尝试修复所有的异常错误和超时问题。我是通过手动逐个禁用所有的异常处理代码来实现的。
4 个回答
0
我想你是想在调试的时候忽略一些错误,而在其他情况下又想让它们生效。
一个不错的方法是设置一个全局变量,比如叫 debug=True,然后根据这个变量来决定是否抛出错误:
debug=True
def foo:
try:
# do some code
except:
if debug: raise #put this in all excepts
现在只要把 debug 设置为 False,就可以在所有地方静音错误了。
3
不,实际上并不是这样。你最好的办法是把代码改成更像下面这样的:
try:
serialport.write(MSG)
except:
some_logging_function_mostly_not_working_that_might_be_here_or_not()
raise
这样做会让它重新抛出相同的错误。你需要明白的主要一点是,如果有一种方法能让所有错误都退出系统的话,你就无法使用for循环了(因为迭代器会抛出一个叫做StopIteration的错误)。
11
使用“捕获所有异常”的 except:
代码块是非常糟糕的做法,应该尽量避免,应该用更合理的方式来处理异常。
在这种情况下,grep
可以帮助你找到这些问题。一个好的开发环境(IDE)可以让这些麻烦的工作变得更容易处理。
不过,在Python中并没有“忽略现有代码”的选项。