Ble*_*der 0 python exception-handling
是否有Python的Python等价物@?
@function_which_is_doomed_to_fail();
Run Code Online (Sandbox Code Playgroud)
我一直用这个块:
try:
foo()
except:
pass
Run Code Online (Sandbox Code Playgroud)
但我知道必须有更好的方法.
有谁知道我如何Pythonicify该代码?
我认为在该代码中添加一些上下文是合适的:
for line in blkid:
line = line.strip()
partition = Partition()
try:
partition.identifier = re.search(r'^(/dev/[a-zA-Z0-9]+)', line).group(0)
except:
pass
try:
partition.label = re.search(r'LABEL="((?:[^"\\]|\\.)*)"', line).group(1)
except:
pass
try:
partition.uuid = re.search(r'UUID="((?:[^"\\]|\\.)*)"', line).group(1)
except:
pass
try:
partition.type = re.search(r'TYPE="((?:[^"\\]|\\.)*)"', line).group(1)
except:
pass
partitions.add(partition)
Run Code Online (Sandbox Code Playgroud)
您正在寻找的是反pythonic,因为:
蒂姆彼得斯
美丽的禅宗禅比丑陋更好.
显式优于隐式.
简单比复杂更好.
复杂比复杂更好.
Flat优于嵌套.
稀疏优于密集.
可读性很重要.
特殊情况不足以打破规则.
虽然实用性胜过纯洁.
错误不应该默默地传递.
除非明确沉默.
面对模棱两可,拒绝猜测的诱惑.
应该有一个 - 最好只有一个 - 明显的方法来做到这一点.
虽然这种方式起初可能并不明显,除非你是荷兰人.
现在比永远好.
虽然从未往往比好正确的现在.
如果实施很难解释,这是一个坏主意.
如果实现很容易解释,那可能是个好主意.
命名空间是一个很棒的主意 - 让我们做更多的事情吧!
在你的情况下,我会使用这样的东西:
match = re.search(r'^(/dev/[a-zA-Z0-9]+)', line)
if match:
partition.identifier = match.group(0)
Run Code Online (Sandbox Code Playgroud)
你有3行而不是4行.