小编Jas*_*per的帖子

为什么`if Exception`在Python中工作

在这个答案/sf/answers/1937657011/中,提供了以下构造

a=[1,2]
while True:
    if IndexError:
        print ("Stopped.")
        break
    print(a[2])
Run Code Online (Sandbox Code Playgroud)

实际上打印"已停止".和破坏(用Python 3.4.1测试).

为什么?!为什么if IndexError甚至合法?为什么a[2]不会引发IndexError不带try ... except身边?

python boolean exception-handling exception

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

用给定的C头解压缩深度嵌套的struct到字典中?

我正在寻找一种解包二进制数据的方法.数据由C头文件中的整个结构树(最多四层深,总结构大小几乎为64k)描述.

对于这个问题:在Python中解压缩嵌套的C结构,唯一的答案是将整个数据描述"压扁"成一个字符串,但我不愿意这样做,因为它不可维护.

我喜欢的是读取头文件然后神奇地创建一个获取二进制数据并返回包含所有数据的(正确嵌套的)字典的函数.

是否有任何Python模块可以完成此任务,或者它的某些部分?

或者还有其他方法可以在Python中处理这些数据吗?

python struct unpack

6
推荐指数
3
解决办法
2438
查看次数

检查对象是否在列表中(不是"按值",而是由id)

请考虑以下代码:

>>> class A(object):
...   def __init__(self, a):
...     self.a = a
...   def __eq__(self, other):
...     return self.a==other.a
... 
>>> a=A(1)
>>> b=A(1)
>>> c=A(2)

>>> a==b
True                   # because __eq__ says so
>>> a==c
False                  # because __eq__ says so
>>> a is b
False                  # because they're different objects

>>> l = [b,c]
>>> a in l
True                   # seems to use __eq__ under the hood
Run Code Online (Sandbox Code Playgroud)

因此,in似乎用于__eq__确定某个容器中是否有东西.

  1. 哪里可以找到有关此行为的文档?
  2. 是否有可能in使用对象标识,即a in …

python comparison-operators

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

正则表达式第二破折号后删除所有内容

我需要使用正则表达式过滤大量数据。数据由如下所示的字符串组成:

60166213

60173866-4533

60167323-9439-1259801

NL170-2683-1262201

60174710-1-A12-4
Run Code Online (Sandbox Code Playgroud)

当我需要它们看起来像这样时:

60166213

60173866-4533

60167323-9439

NL170-2683

60174710-1
Run Code Online (Sandbox Code Playgroud)

如何过滤正则表达式以删除第二个破折号之后的所有内容。破折号的数量各不相同,我需要按原样保留不包含多个破折号的所有字符串。

regex

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

如何将列表列表中的元素转换为小写?

我试图转换列表的小写列表的元素.这就是看起来像.

print(dataset)
[['It', 'went', 'Through', 'my', 'shirt', 'And', 'came', 'out', 'The', 'back', 'and', 'hit', 'the', 'kid', 'behind', 'me', 'in', 'the', 'toe']]
Run Code Online (Sandbox Code Playgroud)

我试过这样做:

for line in dataset:
    rt=[w.lower() for w in line]
Run Code Online (Sandbox Code Playgroud)

但是这给了我一个错误,说列表对象没有属性lower().

python

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

使用Python重新找到"^ M"

我有一个出现字符"^ M"的文件.我想删除所有这些出现.

为此,我尝试使用以下代码 -

re.sub('^M', '', line)
Run Code Online (Sandbox Code Playgroud)

即使多次尝试,我也无法删除它.

任何人都可以告诉我,我正在做什么,并提出一些建议

python regex

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