bgu*_*ach 0 python exception control-flow
我想检查一个单词是否有尾随分号。我有一个长字符串中单词的位置,我想检查该位置的字符是否start of word + length of word是:。该单词可能是字符串中的最后一个单词,因此尝试获取下一个字符将引发IndexException
我有三个想法:
1)检查我们是否不在字符串的末尾,然后检查它是否不是分号
semicolon_pos = pos_word + len(word) # Possible position
if semicolon_pos < len(long_string) and long_string[semicolon_pos] == ':':
# do something...
else:
# do something else
Run Code Online (Sandbox Code Playgroud)
不是通常认为的 pythonic
2) Try- except 分号提取和分号的等式
semicolon_pos = pos_word + len(word) # Possible position
try:
if long_string[semicolon_pos] == ':':
# Do something
else:
# do something else (which is the same as in the except clause)
except IndexError:
# do something else
Run Code Online (Sandbox Code Playgroud)
看起来有点奇怪,先提取然后嵌套。我必须做一些小技巧来避免代码重复
3)尝试排除分号提取和断言以确保它是分号
semicolon_pos = pos_word + len(word) # Possible position
try:
assert long_string[semicolon_pos] == ':'
# do something
except (IndexError, AssertionError):
# do something else
Run Code Online (Sandbox Code Playgroud)
结构更扁平并且易于阅读,但我有一种滥用异常用法的感觉。
蟒蛇人怎么说?提前致谢。
绝对是滥用断言。原因:当使用该标志运行代码时,断言甚至不会执行-O。
使用断言的推荐方法是检查由于算法错误(后置条件)而导致的“不可能”条件。对于前置条件和程序逻辑,应该使用普通异常。
| 归档时间: |
|
| 查看次数: |
889 次 |
| 最近记录: |