我试图将一个对象用作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代码,可以在客户端创建多部分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) 我刚刚升级到IntelliJ IDEA 10,它已经开始做一些非常烦人的事情了.在.txt文件中编写文档时,它已经开始在我输入时给出单词建议.这不仅仅是帮助,而是在消耗系统资源的同时激怒我.我无法在"设置"窗口中找到关闭此功能的方法.也许有一种方法可以告诉Idea不要对某些文件类型或代码注释执行此操作?
干杯,
[R
我正在编写一些可以在堆栈中生成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检索.它有一些使用示例,但没有一个与我正在尝试做的事情相符.
我不相信我是第一个想要这样做的人,所以我必须遗漏一些东西.任何正确方向的指针都非常赞赏.
我正在为我的应用程序编写一些单元测试(使用unittest模块),并希望编写一些可以验证我正在调用的方法返回"类文件"对象的东西.由于这不是一个简单的异地调用,我想知道确定这个的最佳做法是什么?
因此,概述:
possible_file = self.dao.get_file("anotherfile.pdf")
self.assertTrue(possible_file is file-like)
Run Code Online (Sandbox Code Playgroud)
也许我必须关心这个文件对象实现的特定接口,或者哪些方法使它像我想要支持的文件?
谢谢,
[R
我在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.
我有兴趣为我在Linux上使用的现有命令行实用程序编写python绑定或包装器,以便我可以在我的python程序中访问它的功能.是否有一种标准的方法来做到这一点,有人可以指点我?
目前,我已将命令行可执行文件包装在subprocess.Popen调用中,该函数虽然有效,但感觉非常脆弱,我希望使双方之间的集成更加稳定,以便它可以在我以外的地方工作自己的电脑!
我正在尝试构建一个(war)项目,我从另一段代码中复制并修改了pom.xml文件,出于某种原因,当我mvn clean package在软件中它没有将类包含到关联的*-classes.jar中时文件.Ubuntu 12.10上的Maven版本是2.2.1.
我是maven的高手,主要通过复制和粘贴来管理示例,所以我基本上不知道我的pom是如何工作的(它完全包含在下面).
该项目有一个<packaging>war</packaging>元素,maven-war-plugin配置部分说到archiveClasses和attachClasses,我认为这是导致构建*-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) 我正在尝试在我的网址中实现文件名的一些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