小编Hen*_*ger的帖子

为什么ElementTree拒绝使用"编码不正确"的UTF-16 XML声明?

在Python 2.7中,当将一个unicode字符串传递给XML声明fromstring()中包含的ElementTree 方法时encoding="UTF-16",我得到一个ParseError,说明指定的编码不正确:

>>> from xml.etree import ElementTree
>>> data = u'<?xml version="1.0" encoding="utf-16"?><root/>'
>>> ElementTree.fromstring(data)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files (x86)\Python 2.7\lib\xml\etree\ElementTree.py", line 1300, in XML
    parser.feed(text)
  File "C:\Program Files (x86)\Python 2.7\lib\xml\etree\ElementTree.py", line 1642, in feed
    self._raiseerror(v)
  File "C:\Program Files (x86)\Python 2.7\lib\xml\etree\ElementTree.py", line 1506, in _raiseerror
    raise err
xml.etree.ElementTree.ParseError: encoding specified in XML declaration is incorrect: line 1, column 30
Run Code Online (Sandbox Code Playgroud)

那是什么意思?是什么让ElementTree这么认为?

毕竟,我传递的是unicode代码点,而不是字节串.这里没有涉及编码.怎么会不正确?

当然,有人可能会争辩说任何编码都是不正确的,因为这些unicode代码点没有被编码.但是,为什么UTF-8不被拒绝为"错误编码"?

>>> ElementTree.fromstring(u'<?xml version="1.0" …
Run Code Online (Sandbox Code Playgroud)

unicode encoding elementtree python-2.7 python-unicode

11
推荐指数
1
解决办法
5233
查看次数

这些Mono/xbuild警告意味着什么,我该如何修复它们?

我使用Mono的xbuild 2.10.5.0构建了VS2010项目.这些项目使用".NET Framework 3.5 Client Profile"作为目标框架(它们必须兼容3.5并且我不需要超过客户端配置文件部分).

我收到以下警告:

Build succeeded.

Warnings:

c:\Project\MyProject.csproj (default targets) -> C:\PROGRA~2\Mono\lib\mono\4.0\Microsoft.Common.targets (GetReferenceAssemblyPaths target) ->
    C:\PROGRA~2\Mono\lib\mono\4.0\Microsoft.Common.targets:  warning : Unable to find framework corresponding to the target framework moniker '.NETFramework,Version=v3.5,Profile=Client'. Framework assembly references will be resolved from the GAC, which might not be the intended behavior.

c:\Project\MyProject.csproj (default targets) -> C:\PROGRA~2\Mono\lib\mono\4.0\Microsoft.Common.targets (ResolveAssemblyReferences target) ->
    C:\PROGRA~2\Mono\lib\mono\4.0\Microsoft.Common.targets:  warning : Reference 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' not resolved
    C:\PROGRA~2\Mono\lib\mono\4.0\Microsoft.Common.targets:  warning : Found a conflict between : 'System' and 'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. …
Run Code Online (Sandbox Code Playgroud)

mono xbuild

8
推荐指数
1
解决办法
6247
查看次数

我将什么参数传递给芹菜的get_task_logger()函数?

关于日志记录芹菜3.x文档建议设置任务记录器,如下所示:

from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
Run Code Online (Sandbox Code Playgroud)

当我这样做时,CELERYD_TASK_LOG_FORMAT被忽略而日志语句使用CELERYD_LOG_FORMAT,而我无法使用%(task_name)s%(task_id)s.

我的任务是tasks在我的应用程序的模块中myapp.因此,__name__myapp.tasks.

我假设问题是这些行celery/utils/log.py:

def get_task_logger(name):
    logger = get_logger(name)
    if logger.parent is logging.root:
        logger.parent = task_logger
    return logger
Run Code Online (Sandbox Code Playgroud)

因此无论出于何种原因,传递给的模块get_task_logger()必须是第一级模块,否则不会附加任务记录器.没有评论解释为什么会出现这种情况(我想不出你为什么会添加这个限制的原因).__name__不起作用,因为它引用了第二级模块.

我犯了错误还是文档错了?如果是这样,我应该传递给他的是什么get_task_logger()

python celery

8
推荐指数
1
解决办法
2288
查看次数

为什么Google App Engine会在登录时向我的"继续"位置添加路径?

我正在使用Greasemonkey脚本中非常简单的GAE实例.这在过去几个月中运行良好,但现在路径被附加到最终的"继续"位置,这会破坏我的登录过程.

基本工作流程,假设用户已登录其Google帐户,但他的GAE实例令牌已超时:

  1. 用户打开安装了GM脚本的页面A.
  2. GM脚本运行并尝试使用GM_xmlhttpRequest()访问GAE实例.
  3. GAE实例返回"login_needed | <loginurl>".GM脚本提取loginurl并window.location在其上设置.
  4. 用户被重定向到loginurl并最终返回A.但是,这次,GM_xmlhttpRequest()返回实际数据.

最后一步不再有效,因为用户现在被重定向到loginurl 加上一些,这在目标站点上提供了404.

GAE代码只有大约一半的代码.认证相关代码是这样的:

if not users.get_current_user():
    self.response.headers['Content-Type'] = 'text/plain'
    self.response.out.write('login_needed|'+users.create_login_url(self.request.get('uri')))
Run Code Online (Sandbox Code Playgroud)

请求序列如下,全部由重定向引起:

  • 获取https://mygaeinstance.appspot.com/?uri=https://targetsite.com/
  • 获取https://www.google.com/accounts/ServiceLogin?service=ah&passive=true&continue=https://appengine.google.com/_ah/conflogin%3Fcontinue%3Dhttps://targetsite.com/<mpl=gm&ahname=MyGAEInstance&sig = <some sig>
  • 获取https://appengine.google.com/_ah/conflogin?continue=https%3A%2F%2Ftargetsite.com%2F&pli=1&auth=<some base64 auth token>
  • 获取https://targetsite.com/_ah/conflogin?state=<some base64 state>

targetsite.com不喜欢这条道路,正如你所看到的,它是不是在最初的"继续"传递给appengine.google.com说法,这只是"https://targetsite.com/".我做错了什么,如何解决这个问题?

authentication google-app-engine

7
推荐指数
1
解决办法
1699
查看次数

C#中可选ref参数的解决方法

我正在尝试编写一个方法来接受对布尔标志的引用并修改它们.布尔值都是单独声明的(即不在可索引的数据结构中),并且方法的调用者应该能够决定修改哪些布尔值.

示例代码(这适用):

class Program
{
    private static bool b1, b2, b3, b4, b5;

    private static void doSomething(ref bool setTrue, ref bool setFalse, ref bool invert)
    {
        setTrue = true;
        setFalse = false;
        invert = !invert;
    }

    static void Main(string[] args)
    {
        Console.WriteLine("Pre: {0}, {1}, {2}, {3}, {4}", b1, b2, b3, b4, b5);
        doSomething(ref b1, ref b3, ref b5);
        Console.WriteLine("Post: {0}, {1}, {2}, {3}, {4}", b1, b2, b3, b4, b5);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出,如预期:

Pre: False, False, False, False, False
Post: True, …
Run Code Online (Sandbox Code Playgroud)

c# ref optional-parameters c#-3.0

7
推荐指数
1
解决办法
8334
查看次数

具有激活时区支持的Django项目中用于南迁移的DateTimeField的默认值

我正在为我的Django 1.4.3项目创建一个使用South 0.7.6的模式迁移,并启用了时区支持.

模式迁移包括在一个表上添加DateTimeField(with auto_now=True).

在创建迁移时,South提示我:

The field 'MyTable.my_field' does not have a default specified, yet is NOT NULL.
Since you are adding this field, you MUST specify a default
value to use for existing rows. Would you like to:
 1. Quit now, and add a default to the field in models.py
 2. Specify a one-off value to use for existing columns now
Run Code Online (Sandbox Code Playgroud)

如果我不关心现有行的这个值,那么这里给出的正确的一次性值是多少(我只希望迁移成功而没有警告)?

到目前为止,我用过datetime.datetime.utcnow().但是,在应用迁移时,我得到以下内容:

C:\Python27\lib\site-packages\django\db\models\fields\__init__.py:808:
RuntimeWarning: DateTimeField received a naive datetime (2013-01-16 00:00:00)
while …
Run Code Online (Sandbox Code Playgroud)

python django django-south django-timezone

7
推荐指数
1
解决办法
2822
查看次数

当使用docker/fig运行Django dev服务器时,为什么隐藏了一些日志输出?

我正在编写一个Dockerfile,它需要运行多个命令作为CMD指令的一部分,我认为正确的方法是运行一个带有主守护进程的shell脚本exec.不幸的是,作为该过程的一部分,我的一些输出(stdout?stderr?我不知道,我不知道如何找出)迷失了.

这是shell脚本:

#!/bin/sh

python manage.py migrate
exec python manage.py runserver 0.0.0.0:8000
Run Code Online (Sandbox Code Playgroud)

这个想法是migrate命令只运行一次并显示其输出,然后runserver命令应该接管并且容器运行直到该进程退出.

实际问题是输出migrate正确显示,但未显示立即输出runserver.奇怪的是,后来的请求记录runserver显示得很好.

澄清一下,这是我预期的输出:

[...]
No migrations to apply.
[...]
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
[21/Jan/2015 16:27:06] "GET / HTTP/1.1" 200 15829
Run Code Online (Sandbox Code Playgroud)

这是我得到的fig up:

[...]
No migrations to apply.
[...]
[21/Jan/2015 16:27:06] "GET / HTTP/1.1" 200 15829
Run Code Online (Sandbox Code Playgroud)

我甚至都不确定这是谁的错.runserver命令是否根据其运行方式更改其输出?这有问题exec吗?是docker/fig?

作为一个额外的数据点,我注意到在运行容器时我确实获得了所有输出fig run web,但不是在我这样做时fig up …

django shell exec docker fig

7
推荐指数
1
解决办法
1133
查看次数

运行setup.py test时在子包上的ImportError

我正在尝试使用包含的单元测试为Python项目创建一个安装包.我的项目布局如下:

setup.py
src/
    disttest/
        __init__.py
        core.py
tests/
    disttest/
        __init__.py
        testcore.py
Run Code Online (Sandbox Code Playgroud)

setup.py看起来像这样:

from distutils.core import setup
import setuptools

setup(name='disttest',
      version='0.1',
      package_dir={'': 'src'},
      packages=setuptools.find_packages('src'),
      test_suite='nose.collector',
      tests_require=['Nose'],
      )
Run Code Online (Sandbox Code Playgroud)

该文件tests/disttest/testcore.py包含该行from disttest.core import DistTestCore.

setup.py test现在跑步给了一个ImportError: No module named core.

一个setup.py install,python -c "from disttest.core import DistTestCore"工作正常.它也可以,如果我把import coresrc/disttest/__init__.py,但我真的不希望维护和似乎只有必要的测试.

这是为什么?什么是解决它的正确方法?

python distutils setuptools

6
推荐指数
1
解决办法
1129
查看次数

C#等同于Java的Arrays.fill()方法

我在Java中使用以下语句:

Arrays.fill(mynewArray, oldArray.Length, size, -1);
Run Code Online (Sandbox Code Playgroud)

请建议等效的C#.

c# java arrays

6
推荐指数
1
解决办法
7710
查看次数

Heroku/Postgres错误:整数超出范围

PGError: ERROR: integer out of range从尝试插入以下整数获取消息:100001389928198.

根据关于数值数据类型Postgres文档,限制要高得多(9223372036854775807).我有一种感觉Heroku将列视为常规整数而不是BIGINT.

我将迁移定义为BIGINT:

t.column :uid, :bigint
Run Code Online (Sandbox Code Playgroud)

这在Heroku迁移方面不正确吗?

migration postgresql ruby-on-rails heroku ruby-on-rails-3

6
推荐指数
1
解决办法
4159
查看次数