假设您有A,B和C函数。将调用A然后调用B然后B调用C.C循环一堆东西。 C确定存在警告,至少应该知道用户,但它不会阻止该过程。你会如何将这些警告传达给A?
如果我传递一个列表用于从A到B的警告,那么它直接传递给C,因为B没有用它。例外会阻止C继续循环。
这是正常的问题吗?什么是优雅的解决方法?编辑:代码示例
def A():
items = [
[1,2,3],
[4,5,6],
[7,8,9]
]
try:
B(items)
except Exception, e:
print e
def B(items):
for num_list in items:
if len(num_list) == 0:
raise ValueError('A numberlist cannot be emtpy')
C(num_list)
def C(numbers):
for num in numbers:
if num > 9:
## -- Warning???
print '%i is greater than 9, this might break things'
print num
答案 0 :(得分:1)
我有一个A传递一个函数,可以写入某种类型的日志,然后写入B然后是C,然后C可以调用它来记录警告。如果您使用支持参数的语言(如Racket),则可以使用这些语言。请注意,这并不是指函数参数,在Racket参数中是一种处理线程安全状态和更优雅风格的机制。本质上,参数是一个变量,您只能针对特定的代码部分进行变更,并且它会在退出后自动回滚更改,即使是异常或连续跳转等意外控制流也是如此。我知道除了Racket之外没有其他语言可以提供这种结构。