小编Ric*_*d J的帖子

对象作为python词典中的键

我试图将一个对象用作python字典中的一个键,但它的表现方式我无法理解.

首先,我创建一个以对象为关键字的字典:

package_disseminators = {
  ContentType("application", "zip", "http://other/property") : "one",
  ContentType("application", "zip") : "two"
}
Run Code Online (Sandbox Code Playgroud)

现在创建另一个与关键对象"相同"的对象.

content_type = ContentType("application", "zip", "http://other/property")
Run Code Online (Sandbox Code Playgroud)

我已经为ContentType对象提供了自定义__eq__和自定义__str__方法,以便该__eq__方法比较这些__str__值.

现在,一些交互式python:

>>> for key in package_disseminators:
...     if key == content_type:
...             print "match"
...     else:
...             print "no match"
... 
no match
match

>>> content_type in package_disseminators.keys()
True
Run Code Online (Sandbox Code Playgroud)

好的,所以看起来我的对象肯定被正确识别为一个键,所以:

>>> package_disseminators[content_type]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: (& (type="application/zip") (packaging="http://other/property") )
Run Code Online (Sandbox Code Playgroud)

呃......好吗?所以content_type在package_disseminators.keys()列表中,但不是密钥?

>>> …
Run Code Online (Sandbox Code Playgroud)

python dictionary

16
推荐指数
2
解决办法
2万
查看次数

在Python中创建和解析多部分HTTP请求

我正在尝试编写一些python代码,可以在客户端创建多部分mime http请求,然后在服务器上进行适当的解释.我认为,我在客户端部分取得了成功:

from email.mime.multipart import MIMEMultipart, MIMEBase
import httplib
h1 = httplib.HTTPConnection('localhost:8080')
msg = MIMEMultipart()
fp = open('myfile.zip', 'rb')
base = MIMEBase("application", "octet-stream")
base.set_payload(fp.read())
msg.attach(base)
h1.request("POST", "http://localhost:8080/server", msg.as_string())
Run Code Online (Sandbox Code Playgroud)

唯一的问题是电子邮件库还包括Content-Type和MIME-Version标头,我不确定它们将如何与httplib包含的HTTP标头相关:

Content-Type: multipart/mixed; boundary="===============2050792481=="
MIME-Version: 1.0

--===============2050792481==
Content-Type: application/octet-stream
MIME-Version: 1.0
Run Code Online (Sandbox Code Playgroud)

这可能是我的web.py应用程序收到此请求时,我收到错误消息的原因.web.py POST处理程序:

class MultipartServer:
    def POST(self, collection):
        print web.input()
Run Code Online (Sandbox Code Playgroud)

抛出此错误:

Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/web.py-0.34-py2.6.egg/web/application.py", line 242, in process
    return self.handle()
  File "/usr/local/lib/python2.6/dist-packages/web.py-0.34-py2.6.egg/web/application.py", line 233, in handle
    return self._delegate(fn, self.fvars, args)
  File "/usr/local/lib/python2.6/dist-packages/web.py-0.34-py2.6.egg/web/application.py", line 415, in _delegate
    return handle_class(cls) …
Run Code Online (Sandbox Code Playgroud)

python mime http multipart

9
推荐指数
1
解决办法
1万
查看次数

IntelliJ Idea 10:如何在.txt文件中关闭自动完成功能

我刚刚升级到IntelliJ IDEA 10,它已经开始做一些非常烦人的事情了.在.txt文件中编写文档时,它已经开始在我输入时给出单词建议.这不仅仅是帮助,而是在消耗系统资源的同时激怒我.我无法在"设置"窗口中找到关闭此功能的方法.也许有一种方法可以告诉Idea不要对某些文件类型或代码注释执行此操作?

干杯,

[R

intellij-idea code-completion

9
推荐指数
3
解决办法
1万
查看次数

在Python中处理异常堆栈跟踪的正确方法

我正在编写一些可以在堆栈中生成Exceptions的代码,并且我有一个靠近顶层的层,它捕获这些异常并将它们发送出去以供错误处理模块处理.我想要的是错误处理模块能够将堆栈跟踪打印到其错误日志中,但我发现很难弄清楚这样做的方法是什么.

关于背景的一些注意事项:

  • 代码是多线程的,所以我不确定sys.last_traceback的行为

  • 我已经尝试在异常本身的构造函数中捕获堆栈.在这种情况下,sys.last_traceback有时是None(因为它只存在于未处理的异常情况下),并且并不总是正确的.我目前正在玩弄使用

    self.stack = traceback.format_stack()[: - 2]

在异常的构造函数中,虽然这在信息方面看起来很有前景,但它并不像是"正确"的方式来做到这一点

  • 我能够找到的所有如何执行此操作的示例都显示了如何在except块中打印堆栈跟踪,而不是在以后的错误处理模块中打印,这似乎与我想要的行为不同.(例如,参见Python代码中的方法打印当前调用堆栈)

  • 我已经在python docs(http://docs.python.org/library/traceback.html)中挖掘了traceback模块,并且无法弄清楚这是否符合我的要求.它似乎主要关注格式化回溯,因为您可能从sys.last_traceback检索.它有一些使用示例,但没有一个与我正在尝试做的事情相符.

我不相信我是第一个想要这样做的人,所以我必须遗漏一些东西.任何正确方向的指针都非常赞赏.

python error-handling exception stack-trace printstacktrace

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

Python:确定一个对象是否像文件一样?

我正在为我的应用程序编写一些单元测试(使用unittest模块),并希望编写一些可以验证我正在调用的方法返回"类文件"对象的东西.由于这不是一个简单的异地调用,我想知道确定这个的最佳做法是什么?

因此,概述:

possible_file = self.dao.get_file("anotherfile.pdf")
self.assertTrue(possible_file is file-like)
Run Code Online (Sandbox Code Playgroud)

也许我必须关心这个文件对象实现的特定接口,或者哪些方法使它像我想要支持的文件?

谢谢,

[R

python types file

5
推荐指数
2
解决办法
2298
查看次数

为什么我的哈希不是undef?

我在Perl中有以下(从错误中理想化)短脚本:

my %metadata = undef;
if (defined %metadata)
{
    print "defined";
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,程序的输出总是"定义".因此,将哈希值设置为"未定义"会使其定义.它被定义为"未定义"吗?

编辑:

这是一个理想化的案例,试图复制问题.我实际上做的更像是:

my %metadata = my_sub_function();
if (defined %metadata)
{
    print "defined";
}
Run Code Online (Sandbox Code Playgroud)

my_sub_function的输出可能是undef,()或填充的哈希,我只想在最后一种情况下打印"已定义".

编辑2:

顺便说一句,我发现了

if (scalar(keys %metadata)
Run Code Online (Sandbox Code Playgroud)

行为正确的(),但仍然不适用于undef.

perl hash

5
推荐指数
2
解决办法
1736
查看次数

如何为命令行应用程序编写Python绑定

我有兴趣为我在Linux上使用的现有命令行实用程序编写python绑定或包装器,以便我可以在我的python程序中访问它的功能.是否有一种标准的方法来做到这一点,有人可以指点我?

目前,我已将命令行可执行文件包装在subprocess.Popen调用中,该函数虽然有效,但感觉非常脆弱,我希望使双方之间的集成更加稳定,以便它可以在我以外的地方工作自己的电脑!

c c++ python binding

2
推荐指数
1
解决办法
484
查看次数

maven 2.2 war build不会将类放在关联的*-classes.jar文件中

我正在尝试构建一个(war)项目,我从另一段代码中复制并修改了pom.xml文件,出于某种原因,当我mvn clean package在软件中它没有将类包含到关联的*-classes.jar中时文件.Ubuntu 12.10上的Maven版本是2.2.1.

我是maven的高手,主要通过复制和粘贴来管理示例,所以我基本上不知道我的pom是如何工作的(它完全包含在下面).

该项目有一个<packaging>war</packaging>元素,maven-war-plugin配置部分说到archiveClassesattachClasses,我认为这是导致构建*-classes.jar文件的原因.运行构建后,我的目标目录如下所示:

richard@holly:~/Code/External/JavaServer2.0/target$ ls 
apidocs  generated-sources  surefire           sword2-server-1.0-classes.jar  sword2-server-1.0-sources.jar
classes  maven-archiver     sword2-server-1.0  sword2-server-1.0-javadoc.jar  sword2-server-1.0.war
Run Code Online (Sandbox Code Playgroud)

但是sword2-server-1.0-classes.jar不包含任何类:

richard@holly:~/Code/External/JavaServer2.0/target$ jar tf sword2-server-1.0-classes.jar
META-INF/
META-INF/MANIFEST.MF
META-INF/maven/
META-INF/maven/org.swordapp/
META-INF/maven/org.swordapp/sword2-server/
META-INF/maven/org.swordapp/sword2-server/pom.xml
META-INF/maven/org.swordapp/sword2-server/pom.properties
Run Code Online (Sandbox Code Playgroud)

同时,此目录中的所有其他*.jar文件都包含源文件的所有相关信息(javadocs,source等等,都已完成).

我毫无疑问错过了某种形式的插件配置,但到目前为止我无法理解maven插件文档,所以任何帮助都非常感激.

(几乎)完整的pom.xml(为简洁省略了实际的依赖关系):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>org.swordapp</groupId>
<artifactId>sword2-server</artifactId>
<version>1.0</version>
<packaging>war</packaging>

<name>SWORD v2 :: Common Server Library</name>
<description>
    Common Server Library with interfaces to be implemented by servers
    wishing to provide SWORD v2 support
</description> …
Run Code Online (Sandbox Code Playgroud)

java maven-2 build maven

2
推荐指数
1
解决办法
6909
查看次数

Perl uri_escape_utf8不一致的行为(或程序员错误!)

我正在尝试在我的网址中实现文件名的一些URI编码,但是我遇到了一些uri_escape和uri_escape_utf8的奇怪问题,它们似乎行为不一致.

使用perl命令行:

richard@magic-box:$ perl
use URI::Escape;
print uri_escape_utf8("\"quotes\"_in_a_filename.pdf");
%22quotes%22_in_a_filename.pdf
Run Code Online (Sandbox Code Playgroud)

完美,正是我想要的.然后在我的代码中:

print STDERR uri_escape_utf8("\"quotes\"_in_a_filename.pdf");
print STDERR uri_escape("\"quotes\"_in_a_filename.pdf");
Run Code Online (Sandbox Code Playgroud)

这导致我的应用程序日志文件获得以下行:

"quotes"_in_a_filename.pdf
"quotes"_in_a_filename.pdf
Run Code Online (Sandbox Code Playgroud)

奇怪的是,应用程序中的相同位代码与带空格的文件名完美匹配,并且(例如)正确输出:

my%20pdf%20with%20spaces.pdf
Run Code Online (Sandbox Code Playgroud)

我有些困惑,不知道下一步要寻找解决方案.任何帮助感激不尽.

干杯,

[R

url perl escaping

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