3

我在任何地方都找不到这个退出代码,但希望你们中的一个可以帮助我,或者让我知道这是否是 python/Django 中的错误。

无论如何,首先是堆栈跟踪:

    Traceback (most recent call last):
  File "C:\Sitezooi\SiteTest\manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Program Files\Python\lib\site-packages\django\core\management\__init_
_.py", line 385, in execute_from_command_line
    utility.execute()
  File "C:\Program Files\Python\lib\site-packages\django\core\management\__init_
_.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Program Files\Python\lib\site-packages\django\core\management\base.py
", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "C:\Program Files\Python\lib\site-packages\django\core\management\base.py
", line 338, in execute
    output = self.handle(*args, **options)
  File "C:\Program Files\Python\lib\site-packages\django\core\management\command
s\runserver.py", line 83, in handle
    self.run(*args, **options)
  File "C:\Program Files\Python\lib\site-packages\django\core\management\command
s\runserver.py", line 92, in run
    autoreload.main(self.inner_run, args, options)
  File "C:\Program Files\Python\lib\site-packages\django\utils\autoreload.py", l
ine 322, in main
    reloader(wrapped_main_func, args, kwargs)
  File "C:\Program Files\Python\lib\site-packages\django\utils\autoreload.py", l
ine 293, in python_reloader
    exit_code = restart_with_reloader()
  File "C:\Program Files\Python\lib\site-packages\django\utils\autoreload.py", l
ine 279, in restart_with_reloader
    exit_code = os.spawnve(os.P_WAIT, sys.executable, args, new_environ)
UnicodeEncodeError: 'mbcs' codec can't encode characters in position 0--1: inval
id character

请忽略奇怪的文件路径,我什至只是尝试将它直接放在 C:\ 上。

这里还有另一个可能类似的 Stackoverflow 问题:UnicodeEncodeError when using the compile function但它不像我使用的文件路径使用任何非英文字符。我在那里尝试了几个解决方案,但没有奏效。

运行之前在 2.7.x 中测试过的 python 3.4.1 也不起作用。在 linux(Ubuntu)上运行良好。

django 项目没有什么特别之处,因为它只是一个空的 startproject 项目。

4

5 回答 5

6

我遇到了同样的问题,我找到了解决方案。根据我的搜索,Windows 7 和 8 也会发生这种情况。

如果您想更详细地了解我是如何解决它的,请查看我在 Django 论坛中提交的票证:Windows (7 / 8 / 8.1) 上的 manage.py runserver 中的错误

现在解决错误打开这个文件C:\Program Files\Python\lib\site-packages\django\utils\autoreload.py(我使用你的代码作为参考)并在你的错误之前添加这行代码(第 279 行):

new_environ['PATH'] = os.path.abspath(new_environ['PATH'].replace('\u202a', ''))

您的函数现在应该如下所示:

def restart_with_reloader():
    while True:
        args = [sys.executable] + ['-W%s' % o for o in sys.warnoptions] + sys.argv
        if sys.platform == "win32":
            args = ['"%s"' % arg for arg in args]
        new_environ = os.environ.copy()
        new_environ["RUN_MAIN"] = 'true'
        new_environ['PATH'] = os.path.abspath(new_environ['PATH'].replace('\u202a', ''))
        exit_code = os.spawnve(os.P_WAIT, sys.executable, args, new_environ)
        if exit_code != 3:
            return exit_code

现在尝试再次使用 manage.py runserver。我希望这能解决你的问题,不要觉得你是一个人。

于 2014-10-22T20:17:00.040 回答
3

就我而言,它与 无关PATH,似乎CHROME_RESTART有一些非英语字符的环境设置。从中弹出它就可以new_environ了:

def restart_with_reloader():
    while True:
        args = [sys.executable] + ['-W%s' % o for o in sys.warnoptions] + sys.argv
        if sys.platform == "win32":
            args = ['"%s"' % arg for arg in args]
        new_environ = os.environ.copy()
        new_environ["RUN_MAIN"] = 'true'

        # This will prevent UnicodeEncodeError
        new_environ.pop("CHROME_RESTART", None)

        exit_code = os.spawnve(os.P_WAIT, sys.executable, args, new_environ)
        if exit_code != 3:
            return exit_code
于 2016-11-30T12:35:40.403 回答
2

我试过这个

new_environ['PATH'] = os.path.abspath(new_environ['PATH'].replace('\u202a', ''))

但它没有用。

我的解决方案是

new_environ['PATH'] = os.path.abspath(new_environ['PATH'].encode('ascii', 'replace'))

希望对您有所帮助!

于 2014-12-10T05:16:50.093 回答
1
UnicodeEncodeError: 'mbcs' codec can't encode characters in position 0--1:invalid character

我在 Windows 7 上遇到了同样的问题

$ python manage.py runserver

以防万一有人像我一样拥有西里尔计算机名称,这正是导致您的编码问题的原因。因此解决方案是仅使用拉丁字母符号重命名您的计算机。

于 2017-01-27T15:36:35.163 回答
1

我有同样的问题。
原因是环境变量条目中的非拉丁字符。
在我的情况下,它是某个文件夹的西里尔名称,而我的 Windows 最初是英文版本。
于是就产生了冲突。删除它后 - 一切正常。

于 2017-02-12T23:16:08.813 回答