使用datetime strftime方法的析构函数中的怪异异常

时间:2018-12-10 19:00:50

标签: python-3.x destructor

我的__del_方法称为其他方法,该方法可以关闭与硬件的连接。

在关闭连接的方法中,我使用以下代码行(实际上从get_timedate_plus_file_string方法调用,如回溯中所示):

x =  ("ID{:02} {} -".format(print_id_num,datetime.now().strftime("%d/%m/%Y %H:%M:%S")))

然后出现以下错误:

Exception ignored in: <bound method temp_class.__del__ of
<drv_temp_class.c_temp_class object at 0x0000000007DF8A58>>
Traceback (most recent call last):
  File "D:\1\drv_temp_class.py", line 323, in __del__
  File "D:\1\drv_temp_class.py", line 309, in close_connection
  File "D:\1\global_def.py", line 162, in print_msg
  File "D:\1\global_def.py", line 105, in get_timedate_plus_file_string
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 954, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 887, in _find_spec
TypeError: 'NoneType' object is not iterable

我将问题调试为strftime方法,这意味着删除strftime的格式,所有方法都可以正常工作。

此外,我在time.localtime中替换了datetime.datetime的使用,并且一切正常。

有什么主意吗?

1 个答案:

答案 0 :(得分:0)

可以在解释器关闭期间调用__del__方法,可能是在模块(例如datetime)已被清理之后(在您的情况下似乎正在发生)。通常最好将上下文管理器用于必须清理的资源,以便清理代码在解释器开始拆除所有内容之前发生。