我在Python中有一些列表理解,其中每次迭代都会抛出异常.
例如,如果我有:
eggs = (1,3,0,3,2)
[1/egg for egg in eggs]
Run Code Online (Sandbox Code Playgroud)
我会ZeroDivisionError在第3个元素中得到一个例外.
如何处理此异常并继续执行列表推导?
我能想到的唯一方法是使用辅助函数:
def spam(egg):
try:
return 1/egg
except ZeroDivisionError:
# handle division by zero error
# leave empty for now
pass
Run Code Online (Sandbox Code Playgroud)
但这对我来说看起来有点麻烦.
有没有更好的方法在Python中执行此操作?
注意: 这是我设计的一个简单示例(参见上面的" 例如 "),因为我的真实示例需要一些上下文.我不想避免除零错误,而是处理列表理解中的异常.
此代码应在O(n)线性时间内找到列表的模式.我想把它变成一个列表理解,因为我在教自己Python,并且我正在努力提高我的列表理解能力.
这些都是提供信息,但没有真正回答我的问题:
我遇到的问题是嵌套if和try/except.我确信这是一个简单的问题,所以初级Python程序员可能很快得到答案.
def mode(L):
# your code here
d = {}; mode = 0; freq = 0
for j in L:
try:
d[j] += 1
if d[j] > freq:
mode = j; freq = d[j]
except(KeyError): d[j] = 1
return mode
Run Code Online (Sandbox Code Playgroud)
请注意,L参数是这样的int列表:
L = [3,4,1,20,102,3,5,67,39,10,1,4,34,1,6,107,99]
Run Code Online (Sandbox Code Playgroud)
我想的是:
[try (d[j] += 1) if d[j] > freq (mode = j; freq = d[j]) except(KeyError): d[j] = 1 for j in L]
Run Code Online (Sandbox Code Playgroud)
但我没有足够的胶带来修复语法错误的程度.
python list-comprehension try-catch conditional-statements python-2.7