Functional programming 如何处理代码中的警告(不是编译器)

Functional programming 如何处理代码中的警告(不是编译器),functional-programming,Functional Programming,假设你有函数A,B和C,A将被调用,然后调用B,然后B调用一堆东西的C.C循环。C确定存在至少应该让用户知道的警告,但它不会阻止该过程。您将如何向客户传达这些警告 如果我将用于警告的列表从a传递到B,那么它将直接传递到C,因为B对它没有任何用处。异常将阻止C继续其循环 这是正常问题吗?解决这个问题的优雅方法是什么 编辑:代码示例 def A(): items = [ [1,2,3], [4,5,6], [7,8,9] ] t

假设你有函数A,B和C,A将被调用,然后调用B,然后B调用一堆东西的C.C循环。C确定存在至少应该让用户知道的警告,但它不会阻止该过程。您将如何向客户传达这些警告

如果我将用于警告的列表从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

我有一个pass A函数,它可以将某种类型的日志写入到B,然后是C,然后C可以调用它来记录警告。如果您使用的语言支持诸如Racket之类的参数,那么您可以使用这些参数。请注意,这并不是指函数参数,在Racket中,参数是一种以线程安全和更优雅的方式处理状态的机制。从本质上讲,参数是一个变量,您只能对代码的特定部分进行变异,并且它在退出后自动回滚更改,即使出现异常或继续跳转等意外的控制流也是如此。但是,我知道除了Racket之外,没有其他语言提供这种构造。

提供一个实际的代码示例(即使它已损坏或不完整)让其他人修复它总是很有帮助的。语言不重要。是什么让你认为B“对”一个警告列表没有用处?A打电话给B去完成某件事,包括把它适当地设置好。B通过调用C时传递它来适当地设置它。只要在您的头脑中清楚全局状态的变化和每个函数要计算的返回值。