【发布时间】:2019-10-02 18:13:36
【问题描述】:
tl;dr我使用try: ... except Exception as err: pass,但在引发异常时代码仍会停止,即使它不应该。
我正在 csv 上运行转换算法。其中一种转换考虑了数据库中列值的存在。如果它不存在,我会提出这样的异常:
2019-05-15 16:36:37,095 - root - WARNING - The data in 'section_code' either doesn't exist in the raw data or hasn't been correctly encoded. The following strings caused the encoding error : '['398', 'die']'
我知道使用 try: ... except: pass 的这种做法不好,但我希望我的代码继续转换文件,同时只记录出现的错误/警告。
下面是我的代码在 try...except 块中的封装方式
if __name__ == "__main__":
try:
# Initiate logger
logging.basicConfig(
level="DEBUG",
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# Business code ...
except FileNotFoundError as f_err:
logging.exception(f_err)
except AzureMissingResourceHttpError as az_err:
logging.exception(az_err)
except TypeError as t_err:
pass
logging.warning(t_err)
所以我的问题是:为什么pass 语句没有想要的效果,我该如何实现这种行为?
【问题讨论】:
-
pass确实是当需要语句时的占位符代码,但您还没有编码它们。如果您只是向记录器抛出异常,为什么不直接删除pass语句? -
可以去掉pass语句。
-
你要的是Visual Basic的
on error resume next,而Python中没有这种东西。 (这是一件好事;它迫使您思考错误可能发生的确切位置,以及应该如何处理它们。)