gpt4 book ai didi

python - 神秘的 "embedded null byte"错误

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:25 26 4
gpt4 key购买 nike

与团队一起处理一个相当大/复杂的 Django 项目时,我们偶尔会看到运行服务器因 ValueError: embedded null byte 而崩溃。我们重新启动 runserver,一切正常 - 几分钟或几天。我们无法检测到导致崩溃的原因的模式(似乎完全是随机的)。幸运的是,它只发生在本地开发中,而不是在我们的服务器上,但我担心它会阻碍我们前进。

下面的堆栈跟踪没有指向我们代码中的任何位置——似乎来自 Django 或 virtualenv 本身。

在 El Capitan 上使用 Django 1.9.8、Python 3.5.0。

我看不到任何调试方法。理论?

Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/path/to/virtualenvs/ourproj/lib/python3.5/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/path/to/virtualenvs/ourproj/lib/python3.5/site-packages/django/core/management/__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/path/to/virtualenvs/ourproj/lib/python3.5/site-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/path/to/virtualenvs/ourproj/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 54, in execute
super(Command, self).execute(*args, **options)
File "/path/to/virtualenvs/ourproj/lib/python3.5/site-packages/django/core/management/base.py", line 399, in execute
output = self.handle(*args, **options)
File "/path/to/virtualenvs/ourproj/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 93, in handle
self.run(**options)
File "/path/to/virtualenvs/ourproj/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 102, in run
autoreload.main(self.inner_run, None, options)
File "/path/to/virtualenvs/ourproj/lib/python3.5/site-packages/django/utils/autoreload.py", line 333, in main
reloader(wrapped_main_func, args, kwargs)
File "/path/to/virtualenvs/ourproj/lib/python3.5/site-packages/django/utils/autoreload.py", line 299, in python_reloader
reloader_thread()
File "/path/to/virtualenvs/ourproj/lib/python3.5/site-packages/django/utils/autoreload.py", line 275, in reloader_thread
change = fn()
File "/path/to/virtualenvs/ourproj/lib/python3.5/site-packages/django/utils/autoreload.py", line 204, in code_changed
for filename in gen_filenames():
File "/path/to/virtualenvs/ourproj/lib/python3.5/site-packages/django/utils/autoreload.py", line 114, in gen_filenames
basedirs = [os.path.abspath(basedir) for basedir in basedirs
File "/path/to/virtualenvs/ourproj/lib/python3.5/site-packages/django/utils/autoreload.py", line 115, in <listcomp>
if os.path.isdir(basedir)]
File "/path/to/virtualenvs/ourproj/bin/../lib/python3.5/genericpath.py", line 42, in isdir
st = os.stat(s)
ValueError: embedded null byte

最佳答案

  • 其中一个 AppConfig 对象的 path 属性中有空字节。
  • 其中一个 LOCALE_PATHS 有空字节。
  • 其中一个文件的编码“错误”,因此 Django 将某些内容视为空字节(例如 AppConfig.path)。
  • 项目目录中的某个文件或目录的名称中包含空字节 (\x00)。
  • 其他原因。

autoreload.py lines与这个问题有关。 os.path.isdir() 引发 ValueError: embedded null byte 如果它的参数有空字节,例如。 G。 os.path.isdir('foo\x00bar')

你可以尝试编辑autoreload.py,暂时注释掉这几行:

basedirs = [os.path.abspath(basedir) for basedir in basedirs
if os.path.isdir(basedir)]

并添加:

temp_basedirs = []
for basedir in basedirs:
try:
if os.path.isdir(basedir):
temp_basedirs.append(os.path.abspath(basedir))
except ValueError:
print(basedir)
raise
basedirs = temp_basedirs

关于python - 神秘的 "embedded null byte"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38731132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com