python - NameError: name 'open' is not defined 尝试登录文件时
问题描述
所以我选择在我的 discord.py 机器人中实现日志记录,这很好,花花公子,工作正常。但是一旦我将日志记录添加到文件中,无论是通过使用文件处理程序
handler = logging.FileHandler(
filename="../logs/bot.log",
mode="a")
formatter = logging.Formatter("%(asctime)s %(name)-30s %(levelname)-8s %(message)s")
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)
logging.getLogger().addHandler(handler)
或者通过 basicConfig
logging.basicConfig(filename="../logs/bot.log", filemode="a", format="%(asctime)s %(name)-30s %(levelname)-8s %(message)s", level=logging.DEBUG)
我总是在退出时得到这个 Traceback
Exception ignored in: <function ClientSession.__del__ at 0x7fe1330b9790>
Traceback (most recent call last):
File "/home/lukas/PycharmProjects/coconutbot/venv/lib/python3.8/site-packages/aiohttp/client.py", line 314, in __del__
File "/usr/lib/python3.8/asyncio/base_events.py", line 1740, in call_exception_handler
File "/usr/lib/python3.8/logging/__init__.py", line 1463, in error
File "/usr/lib/python3.8/logging/__init__.py", line 1577, in _log
File "/usr/lib/python3.8/logging/__init__.py", line 1587, in handle
File "/usr/lib/python3.8/logging/__init__.py", line 1649, in callHandlers
File "/usr/lib/python3.8/logging/__init__.py", line 950, in handle
File "/usr/lib/python3.8/logging/__init__.py", line 1182, in emit
File "/usr/lib/python3.8/logging/__init__.py", line 1172, in _open
NameError: name 'open' is not defined
Exception ignored in: <function ClientResponse.__del__ at 0x7fe13300b430>
Traceback (most recent call last):
File "/home/lukas/PycharmProjects/coconutbot/venv/lib/python3.8/site-packages/aiohttp/client_reqrep.py", line 757, in __del__
File "/home/lukas/PycharmProjects/coconutbot/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 177, in release
File "/home/lukas/PycharmProjects/coconutbot/venv/lib/python3.8/site-packages/aiohttp/connector.py", line 629, in _release
File "/home/lukas/PycharmProjects/coconutbot/venv/lib/python3.8/site-packages/aiohttp/client_proto.py", line 62, in close
File "/usr/lib/python3.8/asyncio/selector_events.py", line 690, in close
File "/usr/lib/python3.8/asyncio/base_events.py", line 719, in call_soon
File "/usr/lib/python3.8/asyncio/base_events.py", line 508, in _check_closed
RuntimeError: Event loop is closed
由于 Traceback 不包含我自己的任何文件,我完全不知道做错了什么。我怀疑我可能需要进行一些手动清理,但即使我这样做了,logging.shutdown()
我也会得到相同的 Traceback
解决方案
那是因为某些东西(asyncio
在这种情况下)试图在解释器的关闭阶段记录。
这是一个已知问题。该模块的解决方法logging
已在 python 3.10 中实现
发生这种情况是因为在open
文件处理程序有时间使用它之前,垃圾收集器已经删除了该名称。
您可以通过在程序退出之前尝试显式关闭/释放资源来避免此问题。
推荐阅读
- python - Django 2.1.7,IntegrityError,外键约束失败
- php - 在 laravel 中间件上调用 null 上的成员函数 setCookie()
- charles-proxy - 无法将三星 S10 连接到查尔斯代理
- chart.js - 使chartjs图例标签可标签化
- python - 熊猫指定自定义假期
- javascript - 将两个数组转换为 JSON 对象
- javascript - 服务器上的推送通知问题
- javascript - 我们如何为各种日历创建添加到日历按钮
- html - img浮动影响居中
- sql - 试图找到购买过brand1和brand2的客户及其总销售额