用于从一些冗长复杂的JSON文件加载数据的Python代码:
with open(filename, "r") as f:
data = json.loads(f.read())
Run Code Online (Sandbox Code Playgroud)
(注意:最好的代码版本应该是:
with open(filename, "r") as f:
data = json.load(f)
Run Code Online (Sandbox Code Playgroud)
但都表现出类似的行为)
对于许多类型的JSON错误的(缺少分隔符,在字符串中不正确的反斜杠,等等),这个打印包含在那里被发现的JSON错误的行和列数一个不错的有用信息.
但是,对于其他类型的JSON错误(包括经典的"在列表中的最后一项上使用逗号",还有其他内容,如大写true/false),Python的输出只是:
Traceback (most recent call last):
File "myfile.py", line 8, in myfunction
config = json.loads(f.read())
File "c:\python27\lib\json\__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "c:\python27\lib\json\decoder.py", line 360, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "c:\python27\lib\json\decoder.py", line 378, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
Run Code Online (Sandbox Code Playgroud)
对于那种类型的ValueError,你如何让Python告诉你JSON文件中的错误在哪里?
什么是一个很好的算法,根据他们以前的选择建议某人可能喜欢的东西?(例如,由亚马逊推广推荐书籍,并在iRate Radio或YAPE等服务中使用,您可以通过评分项目获得建议)
示例代码:
#!/usr/bin/python
import socks
import socket
import urllib2
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS4, "127.0.0.1", 9050, True)
socket.socket = socks.socksocket
print urllib2.urlopen("http://almien.co.uk/m/tools/net/ip/").read()
Run Code Online (Sandbox Code Playgroud)
TOR在端口9050上运行SOCKS代理(默认值).该请求通过TOR,在我自己以外的IP地址上显示.但是,TOR控制台会发出警告:
"2月28日22:44:26.233 [警告]你的应用程序(使用socks4到端口80)只给Tor一个IP地址.做DNS解析的应用程序本身可能泄漏信息.考虑使用Socks4A(例如通过privoxy或socat).有关详细信息,请参阅 https://wiki.torproject.org/TheOnionRouter/TorFAQ#SOCKSAndDNS."
即DNS查找不通过代理.但这就是setdefaultproxy应该做的第4个参数,对吧?
来自http://socksipy.sourceforge.net/readme.txt:
setproxy(proxytype,addr [,port [,rdns [,username [,password]]]])
rdns - 这是一个布尔标志,而不是修改DNS解析的行为.如果设置为True,则将在服务器上远程执行DNS解析.
选择PROXY_TYPE_SOCKS4和PROXY_TYPE_SOCKS5时效果相同.
它不能是本地DNS缓存(如果urllib2甚至支持它),因为当我将URL更改为此计算机以前从未访问过的域时会发生这种情况.
假设您要生成标识符和字符串的匹配列表
enum
{
NAME_ONE,
NAME_TWO,
NAME_THREE
};
myFunction(NAME_ONE, "NAME_ONE");
myFunction(NAME_TWO, "NAME_TWO");
myFunction(NAME_THREE, "NAME_THREE");
Run Code Online (Sandbox Code Playgroud)
..没有重复自己,没有自动生成代码,使用C/C++宏
初步猜测:
您可以添加包含的#include文件
myDefine(NAME_ONE)
myDefine(NAME_TWO)
myDefine(NAME_THREE)
Run Code Online (Sandbox Code Playgroud)
然后使用它两次,如:
#define myDefine(a) a,
enum {
#include "definitions"
}
#undef myDefine
#define myDefine(a) myFunc(a, "a");
#include "definitions"
#undef myDefine
Run Code Online (Sandbox Code Playgroud)
但#define不允许你在字符串中放置参数?
pyparsing可以从文件中读取ABNF而不必根据python对象定义它吗?
如果没有,是否有类似的东西(将ABNF文件加载到解析器对象)
在ActivePerl中,"ppm"从Internet安装包,"ppm install x.ppd"从ppd文件安装,但大多数CPAN包以.tar.gz形式分发.
如何为运行没有Internet连接的ActivePerl的计算机提供模块?("make"可能无法使用.)
更新:Internet连接可用于下载文件并使用USB密钥等将其传输到计算机.
示例python程序:[CGI脚本,因此它需要选择自己的语言,而不是使用主机操作系统设置的任何内容]
import gettext
gettext.install('test', "./locale")
_ = gettext.gettext
t = gettext.translation('test', "./locale", languages=['fr'])
t.install()
print _("Hello world")
Run Code Online (Sandbox Code Playgroud)
./locale/fr/LC_messages/test.mo包含转换(作为二进制文件,通过在.po文件上运行msgfmt生成).
程序打印"Hello world"而不是翻译版本.可能是什么问题呢?
考虑这样一种情况:例如,一个20GB目录存储在一台没有20.1GB磁盘空间的计算机上,我们希望将该目录置于版本控制之下.服务器可用于存储修订历史记录.
在subversion中,我们从服务器检出一个空目录,添加文件并提交它.这将创建与工作目录大小相同的.svn目录,以便它可以检测更改并创建差异.在进行常规更改时,.svn目录的大小不会随时间而变化.
但是,在git(git init .; git add .; git commit)中尝试这一点需要我们在本地存储完整的历史记录.由于进行了常规更改(假设大型二进制文件不能很好地压缩),.git目录会一直增长,直到它不适合磁盘.
有没有办法操作git,以便它不会在本地存储完整的历史记录; 这样它只保存有关您正在处理的分支的提示的数据,并在每次需要有关历史修订或其他分支的信息时查询远程服务器?
注意:我知道.git目录的压缩效果更好,你可以在大于.svn目录之前进行大量的修改 - 问题是它随着时间的推移而增长,而.svn却没有
是否有可能有一个C++模板函数可以访问其输入数据中的不同字段,具体取决于传递给它的输入数据类型?
例如,我有以下形式的代码:
typedef struct
{
int a;
int b;
}s1;
typedef struct
{
int a;
}s2;
template <class VTI_type> void myfunc(VTI_type VRI_data, bool contains_b)
{
printf("%d", VRI_data.a);
if(contains_b) // or suggest your own test here
printf("%d", VRI_data.b); // this line won't compile if VTI_type is s2, even though s2.b is never accessed
}
void main()
{
s1 data1;
data1.a = 1;
data1.b = 2;
myfunc <s1> (data1, true);
s2 data2;
data2.a = 1;
myfunc <s2> (data2, false);
} …Run Code Online (Sandbox Code Playgroud)