如何URLError在Python中区分超时错误和其他?
编辑
当我抓到一个URLError,它可能是Temporary failure in name resolution或timeout,或其他一些错误?我怎么能告诉彼此呢?
我正在使用ubuntu。
我发现/usr/lib/python和都安装了许多Python库/usr/lib64/python。
当我print使用模块对象时,模块路径显示该模块位于中/usr/lib/python。
那为什么我们需要/usr/lib64/python目录呢?这两个目录有什么区别?
BTW
egg-info这两个目录中的某些软件包管理脚本实际上是指向中的软件包的链接/usr/share。
大多数Python模块只是链接,但so文件不是。
我的实验代码是这样的:
import signal
def hi(signum, frame):
print "hi"
signal.signal(signal.SIGINT, hi)
signal.signal(signal.SIGINT, signal.SIG_IGN)
Run Code Online (Sandbox Code Playgroud)
hi没有被打印,因为信号处理程序被signal.SIG_IGN.
我怎样才能避免这种情况?
如PEP435中所述,enum可以通过以下方式定义:
class Color(Enum):
red = 1
green = 2
blue = 3
Run Code Online (Sandbox Code Playgroud)
并将所得enum members的Color可实现高精细的顺序重复:Color.red, Color.green, Color.blue.
这让我想起了Form在Django中,哪些字段可他们在声明的顺序渲染Form子类.他们通过维护字段计数器来实现这一点,每次实例化新字段时计数器值都会增加.
但是在定义中Color,我们没有像a这样的东西,我们FormField怎么能实现呢?
When I use client libraries like MySQLdb or oursql, how can I know if it's using prepared statements or not?
Is there anyway I can tell the difference on the server side? Maybe by looking into some kind of logs?
EDIT: I'm using MySQL5.1
在像peephole这样的内部模块中,参数LOAD_CONST存储在后面的两个字节中opcode.
例如,它用于获取操作参数的宏实现为:
#define GETARG(arr, i) ((int)((arr[i+2]<<8) + arr[i+1]))
参数LOAD_CONST是consts数组的索引.
所以我猜我们在Python函数中最多只能使用2 ^ 16个常量.
但是当我尝试使用66666(> 65536)常量的函数时,它仍然可以正常运行.
可能是什么原因?
出于好奇,我对这两个函数做了以下基准测试:
In [12]: %timeit datetime.datetime.now()
100000 loops, best of 3: 5.09 µs per loop
In [13]: %timeit datetime.date.today()
100000 loops, best of 3: 6.4 µs per loop
Run Code Online (Sandbox Code Playgroud)
我认为date对象涉及的信息较少,所以它应该是更快的,但事实证明它更慢。
可能是什么原因?
我读的源代码testinfra中Ansible模块.我找到了以下几行代码:
# Ansible return an unicode object but this is bytes ...
# A simple test case is:
# >>> assert File("/bin/true").content == open("/bin/true").read()
stdout_bytes = b"".join((chr(ord(c)) for c in out['stdout']))
stderr_bytes = b"".join((chr(ord(c)) for c in out['stderr']))
Run Code Online (Sandbox Code Playgroud)
它迭代stdout,获取每个字符的整数序数并将其转换回单字符字符串.但重点是什么?
首先,让我展示一下我做的实验:
In [69]: dis.dis(lambda : 4 / 2 + 1.5 * 2 + (4 - 2))
1 0 LOAD_CONST 1 (4)
3 LOAD_CONST 2 (2)
6 BINARY_DIVIDE
7 LOAD_CONST 4 (3.0)
10 BINARY_ADD
11 LOAD_CONST 5 (2)
14 BINARY_ADD
15 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
正如您在输出中看到的那样dis.dis,1.5 * 2并且4 - 2编译为LOAD_CONST而不是两个LOAD_CONST后跟二进制操作.
但4 / 2不会被类似的东西所取代LOAD_CONST 4 (2).
我想知道为什么在优化中遗漏了分裂.
我使用的Python版本是2.7.5.
顺便说一句,似乎在Python 3中,这样的函数得到了更好的优化,这就是我所看到的:
>>> dis.dis(lambda : 4 / 2 + 1.5 * 2 + …Run Code Online (Sandbox Code Playgroud)