추상 위키백과/오류 표현

From Meta, a Wikimedia project coordination wiki
This page is a translated version of the page Abstract Wikipedia/Representation of errors and the translation is 100% complete.

메일링 리스트를 통한 추상 위키백과 IRC의 추상 위키백과 텔레그램의 위키함수 마스토돈의 위키함수 트위터의 위키함수 페이스북의 위키함수 유튜브의 위키함수 위키함수 웹사이트 Translate

동기와 근거

위키함수에서 오류는 여러 가지 이유로 발생할 수 있습니다. 입력을 해석할 수 없을 때, 값을 계산할 수 없을 때, 결과를 계산할 리소스가 충분하지 않을 때 등. 여기에 더해 제어된 방식으로 오류가 발생할 수도 있으며 사용자 정의 함수 중에 생성되고 발생할 수 있습니다.

이러한 이유로 위키함수는 Z5/오류Z50/오류 유형으로 오류를 표시하고 보고하는 통합된 방법을 제공합니다. 마찬가지로 내부 시스템 오류 또는 문제로 인해 생성되고 반환되는 오류를 포함하는 Z500-Z599 범위의 다양한 기본 제공 오류 유형 인스턴스가 Z500-Z599에 있습니다.

Z50/Error type의 인스턴스는 오류 설명이 포함된 레이블을 번역할 수 있도록 유지될 수 있으며 아마도 유지되어야 합니다. 반면에 Z5/Error 인스턴스는 문제가 발생할 때마다 런타임에 생성됩니다(Z5 유형의 ZObject는 절대 지속되지 않음). 사용자에게 반환되는 Z5/Error 인스턴스에는 1) 문제를 보다 정확하게 설명하는 오류 유형에 대한 참조 및 2) 이 오류를 생성한 특정 데이터가 포함됩니다.

Z5/오류

모든 오류는 ZObject입니다. 오류는 모두 두 개의 키가 있는 Z5/오류 유형을 갖습니다.

  • Z5K1/오류 유형(Z50/오류 유형): 이 Z5에서 보고된 오류 유형을 설명하는 Z50 유형의 객체를 사용합니다. 일반적으로 아래에 설명된 미리 정의된 오류 유형 중 하나에 대한 참조입니다.
  • Z5K2/오류 값(Z1/Any): Z5K1 키에 설명된 오류 유형의 인스턴스입니다. 여기에는 잘못된 값을 식별하기 위한 추가 정보가 포함됩니다.

다음은 간단한 예입니다.

유효성 검사 엔진에 다음 ZObject의 올바른 형식을 확인하도록 요청한다고 가정합니다:

{
 "value": "test"
}
{
 "Z6K1": "test"
}

주어진 ZObject에서 Z1K1/type이 누락되었으므로 오류가 반환되어야 합니다. 정확한 오류는 평가 엔진에 따라 다를 수 있지만 일부 형식이 올바르지 않은 오류가 반환되어야 합니다. 여기에 가능한 답이 하나 있습니다.

{
 "type": "Error",
 "error type": "not well-formed error",
 "error value": {
  "type": {
   "type": "Function call",
   "function": "Errortype to type",
   "errortype": "not well-formed error"
  },
  "error type": "missing Z1K1",
  "error value": {
   "type": {
    "type": "Function call",
    "function": "Errortype to type",
    "errortype": "missing Z1K1"
   },
   "object": {
    "type": "Quote",
    "quotation": {
     "value": "test"
    }
   }
  }
 }
}
{
 "Z1K1": "Z5",
 "Z5K1": "Z502",
 "Z5K2": {
  "Z1K1": {
   "Z1K1": "Z7",
   "Z7K1": "Z885",
   "Z885K1": "Z502"
  },
  "Z502K1": "Z523",
  "Z502K2": {
   "Z1K1": {
    "Z1K1": "Z7",
    "Z7K1": "Z885",
    "Z885K1": "Z523"
   },
   "Z523K1": {
    "Z1K1": "Z99",
    "Z99K1": {
     "Z6K1": "test"
    }
   }
  }
 }
}

이것은 오류 계층 구조를 통해 시스템이 특정 유형의 오류를 필터링할 수 있는 매우 복잡한 패턴을 보여줍니다. 이 경우 계층 구조에는 Z502/잘 구성되지 않음 및 Z523/Missing Z1K1이 모두 포함됩니다. 모든 오류와 마찬가지로 최상위 유형으로 Z5/Error로 시작하기 때문에 이것이 오류임을 쉽게 인식할 수 있습니다. 다음 섹션에서 Z523에 대해 자세히 살펴보겠습니다.

Z50/Error 유형

오류 유형은 Z50으로 표시되며 Z4/Type 객체와 모양이 매우 유사합니다. 오류를 설명하는 데 필요한 Z3/키 목록이 포함된 하나의 키 Z50K1이 있습니다.

예를 들어, 앞의 예를 따르면 Z523은 Z50/오류 유형의 ZObject이며 그 정의는 다음과 같습니다:

{
 "type": "Error type",
 "keys": [
  {
   "type": "Key",
   "value type": "Quote",
   "key id": "Z523K1",
   "label": {
    "type": "Multilingual text",
    "texts": [
     {
      "type": "Monolingual text",
      "language": "English",
      "text": "object"
     }
    ]
   }
  }
 ]
}
{
 "Z1K1": "Z50",
 "Z50K1": [
  {
   "Z1K1": "Z3",
   "Z3K1": "Z99",
   "Z3K2": "Z523K1",
   "Z3K3": {
    "Z1K1": "Z12",
    "Z12K1": [
     {
      "Z1K1": "Z11",
      "Z11K1": "Z1002",
      "Z11K2": "object"
     }
    ]
   }
  }
 ]
}

여기에서 Z523에는 ID Z523K1과 Z99/Quote 유형의 영문 레이블 "object"가 있는 단일 키가 있음을 알 수 있습니다. 이 키의 값은 Z1K1이 누락된 것으로 발견된 (인용된) 객체가 됩니다. (Z99/Quote는 Z523을 처리하는 동안 평가되어서는 안 된다는 것을 나타내기 위해 잘못된 개체 주위의 래퍼로 사용됩니다.) 이 오류 유형 정의는 Z523으로 유지되며 키 Z2K1(영구 개체 레이블), 여기에 표시되지 않은 오류 유형의 다국어 이름인 "Missing Z1K1"이 포함됩니다. 전체 데이터 JSON 정의를 참조하세요.

Z523/"Missing Z1K1" 유형의 오류를 감지할 때 다음을 통해 Z5/오류 객체를 빌드합니다:

  1. 오류 유형 Z523에 대한 참조를 Z5K1의 값으로 추가하고
  2. 오류 유형 Z523의 인스턴스 생성.

오류 유형의 인스턴스

오류 유형의 인스턴스를 생성하려면 먼저 해당 오류 유형을 공식적인 유형으로 변환해야 합니다. Z885/"Error Type to type" 함수를 호출하여 이를 수행합니다.

이 함수는 Z50K1에 나열된 키를 사용하여 해당 키가 Z4K2인 Z4/Type을 만들고 반환합니다. Z885를 구현한 함수 구성 Z995를 참조하십시오.

오류 유형의 인스턴스는 그 유형으로 Z885에 대한 함수 호출의 결과를 가지게 되며, 이 경우 오류 유형 id Z523을 인수 Z885K1로 전달합니다.

{
 "type": {
  "type": "Function call",
  "function": "Errortype to type",
  "errortype": "Missing Z1K1"
 }
}
{
 "Z1K1": {
  "Z1K1": "Z7",
  "Z7K1": "Z885",
  "Z885K1": "Z523"
 }
}

이 호출의 결과인 Z4/Type을 보려면 다음 입력과 함께 wikilambda_function_call API를 실행해 보십시오:

{
  "Z1K1": "Z7",
  "Z7K1": "Z885",
  "Z885K1": "Z523"
}

notwikilambda에서 사용해 보세요.

응답은 다음 Z4/유형입니다:

{
 "type": "Type",
 "identity": {
  "Z1K1": "Z7",
  "Z7K1": "Z885",
  "Z885K1": "Z523"
 },
 "keys": [
  {
   "type": "Key",
   "value type": "Quote",
   "key id": "Z523K1",
   "label": {
    "type": "Multilingual text",
    "texts": [
     {
      "type": "Monolingual text",
      "language": "English",
      "text": "object"
     }
    ]
   }
  }
 ],
 "validator": "Z101"
}
{
 "Z1K1": "Z4",
 "Z4K1": {
  "Z1K1": "Z7",
  "Z7K1": "Z885",
  "Z885K1": "Z523"
 },
 "Z4K2": [
  {
   "Z1K1": "Z3",
   "Z3K1": "Z99",
   "Z3K2": "Z523K1",
   "Z3K3": {
    "Z1K1": "Z12",
    "Z12K1": [
     {
      "Z1K1": "Z11",
      "Z11K1": "Z1002",
      "Z11K2": "object"
     }
    ]
   }
  }
 ],
 "Z4K3": "Z101"
}

오류 중첩

지속성 또는 실행 전에 ZObject는 정적 유효성 검사 또는 올바른 형식의 동기 프로세스를 거칩니다. 이 유효성 검사는 위키람다 확장(opis JSON 스키마 사용) 또는 NodeJS 백엔드 서비스(Ajv JSON 스키마 유효성 검사기 사용)에서 function-schemata에 있는 JSON 스키마 정의에 대해 지정된 ZObject를 확인하여 수행됩니다.

ZObject는 중첩된 ZObject이기 때문에 하위 키-값의 오류로 인해 상위 키-값이 유효하지 않을 수 있습니다. 예를 들어 다음 ZObject에서:

{
 "Z1K1": "Z12",
 "Z12K1": [
  {
   "Z1K1": "Z11",
   "Z11K1": "Z1002",
   "Z11K2": "true"
  },
  {
   "Z1K1": "Z11",
   "Z11K1": "Z1002",
   "Z11K2": false
  }
 ]
}

첫 번째 Z11K2(7행)의 값은 정확하지만 두 번째 Z11K2(12행)의 값은 정확하지 않습니다. 즉, 목록에서 Z11/monolingual string 유형의 첫 번째 ZObject는 올바르고 두 번째는 올바르지 않습니다. 이 목록의 두 번째 요소에서 발생한 유효성 검사 오류는 상위 객체로 전파되며 다음 위치에서도 정적 유효성 검사 오류가 발생합니다:

  1. 전체 목록(3-14행),
  2. Z12K1의 값, 그리고 마지막으로,
  3. 전체 Z12/다국어 문자열 ZObject.

위 객체에 대한 정적 유효성 검사는 이 정확한 유효성 검사 오류 트리를 나타내는 Z5/오류 개체를 생성하고 정확한 값 문제에 도달할 때까지 키별로 아래로 분기를 따릅니다. 위 오류의 단순화된 표현은 다음과 같습니다:

{
 "Z1K1": "Z5",
 "Z5K1": "Z502",       // Root error. Z502: "Not wellformed" error
 "Z5K2": {
  "Z1K1": "Z502",
  "Z502K1": "Z526",    // What's the internal error? Z526 
  "Z502K2": {          // Okay, let's see it.
   "Z1K1": "Z5",
   "Z5K1": "Z526",      // Z526: "Key value not wellformed" error
   "Z5K2": {
    "Z1K1": "Z526",
    "Z526K1": "Z12K1",  // Which is the non-valid key? "Z12K1"
    "Z526K2": {         // Sure, but why?
     "Z1K1": "Z5",
     "Z5K1": "Z522",   // Z522: "Array element not wellformed" error
     "Z5K2": {
      "Z1K1": "Z522",
      "Z522K1": "1",   // Which element is not valid? The one with index "1"
      "Z522K2": {      // Okay. But, why?!
       "Z1K1": "Z5",
       "Z5K1": "Z526",      // Z526: "Key value not wellformed" error
       "Z5K2": {
        "Z1K1": "Z526",
        "Z526K1": "Z11K2",  // Which is the non valid key this time? "Z11K2"
        "Z526K2": {         // Can I know why?
         "Z1K1": "Z5",
         "Z5K1": "Z521",   // Z521: "ZObjects must not be a number or Boolean or null" error
         "Z5K2": {
          "Z1K1": "Z521",
          "Z521K1": {      // What's the offending value?
           "Z1K1": "Z99",
           "Z99K1": false  // Here, this one.
          }
         }
        }
       }
      }
     }
    }
   }
  }
 }
}

위의 ZObject는 가독성을 위해 단순화되었지만 "Z1K1": "Z526"과 같은 유형은 유효하지 않으며 대신 함수 호출 Z885(오류 type to type) 대신 에서 설명한 대로.

다음 오류 유형은 루트 및/및 분기 오류를 설명하는 데 사용할 수 있습니다:

  • Z502: "잘못된 형식" 오류: 이것은 정적 유효성 검사에서 반환된 모든 오류 트리의 루트 오류 유형입니다. 두 번째 키에는 구문 분석 프로세스 중에 발견된 오류가 포함되어 있습니다.
  • Z526: "키 값 형식이 올바르지 않음" 오류: 분기 오류 유형입니다. 첫 번째 매개변수는 유효하지 않은 ZObject가 포함된 키에 대한 정보를 제공하고 두 번째 매개변수는 아래쪽에서 전파되는 오류입니다.
  • Z522: "배열 요소의 형식이 올바르지 않음" 오류: 이것도 분기 오류 유형입니다. JSON 배열을 허용하는 유일한 형식이므로 정식 객체의 유효성 검사 중에만 반환될 수 있습니다. 첫 번째 매개변수는 유효성 검사 오류(0부터 시작)를 일으킨 오류의 인덱스를 제공하고 두 번째 매개변수는 전파된 오류를 포함합니다.

Z509 작업/오류 목록

여러 오류를 반환해야 하는 경우 이러한 오류는 Z509/오류 목록 유형의 상위 오류로 래핑됩니다. Z509 유형의 오류에는 Z5/error ZObject 목록이 포함되어 있으며 분기 오류 유형과 리프 오류 유형이 포함될 수 있습니다. 예를 들어 다음과 같은 Z3/key 유형의 ZObject는 두 가지 이유로 유효성 검사 오류를 발생시킵니다:

  1. Z3K2에는 허용되지 않는 값 유형인 숫자가 포함되어 있습니다.
  2. 필수 키 Z3K3가 없습니다.
{
	"Z1K1": "Z3",
    "Z3K1": "Z6",
	"Z3K2": 34
}

이 ZObject의 정적 유효성 검사는 두 개의 개별 오류 분기를 포함하는 유효성 검사 오류를 발생시킵니다:

{
 "Z1K1": "Z5",
 "Z5K1": "Z502",      // Root error of type Z502: "Not wellformed"
 "Z5K2": {
  "Z1K1": "Z502",
  "Z502K1": "Z509",   // What's the internal error? "Z509"
  "Z502K2": {         // Okay, let's see it.
   "Z1K1": "Z5",
   "Z5K1": "Z509",    // Z509: "List of errors" error
   "Z5K2": {
    "Z1K1": "Z509",
    "Z509K1": [       // What errors were found?
     {
      "Z1K1": "Z5",       // First error from the list:
      "Z5K1": "Z526",     // Non terminal error of type Z526: "Key value not wellformed"
      "Z5K2": {
       "Z1K1": "Z526",
       "Z526K1": "Z3K2",  // Which is the non valid key? "Z3K2"
       "Z526K2": {        // Why?
        "Z1K1": "Z5",
        "Z5K1": "Z521",   // Z521: "ZObjects must not be a number or Boolean or null" error
        "Z5K2": {
         "Z1K1": "Z521",
         "Z521K1": {      // What's the offending value?
          "Z1K1": "Z99",
          "Z99K1": 34     // Here, this value is wrong.
         }
        }
       }
      }
     },
     {
      "Z1K1": "Z5",       // Second error from the list:
      "Z5K1": "Z511",     // Terminal error of type Z511: "Key not found"
      "Z5K2": {
       "Z1K1": "Z511",
       "Z511K1": "Z3K3",  // Which is the missing key? "Z3K3"
       "Z511K2": {        // Where is it missing from?
        "Z1K1": "Z99",
        "Z99K1": {        // From here.
         "Z1K1": "Z3",
         "Z3K1": "Z6",
         "Z3K2": 34
        }
       }
      }
     }
    ]
   }
  }
 }
}

설명된 바와 같이 오류 Z509/오류 목록의 값을 형성하는 오류 목록에는 분기 수준 오류(예: 유형 Z526/키 값이 올바르지 않음) 및 리프 오류(예: Z511/키를 찾을 수 없음 유형의 목록에 있는 두 번째 오류와 유사하게 Z509/오류 목록 유형의 오류 > 오류 트리의 모든 수준에서 여러 번 찾을 수 있습니다.

예를 들어 Z11/단일 언어 문자열 목록의 유일한 요소에 두 개의 필수 키 Z11K1 및 <code가 누락된 이와 같은 유효하지 않은 ZObject의 경우 >Z11K2</코드>:

{
 "Z1K1": "Z3",
 "Z3K1": "Z6",
 "Z3K2": "Z1000K1",
 "Z3K3": {
  "Z1K1": "Z12",
  "Z12K1": [
   {
    "Z1K1": "Z11"
   }
  ]
 }
}

Z509/오류 목록 유형의 오류는 두 오류의 직접적인 부모가 될 때까지 발생하지 않으며 목록의 두 오류는 Z511/키를 찾을 수 없음</ 코드 유형의 리프 오류입니다. 코드>:

{
 "Z1K1": "Z5",
 "Z5K1": "Z502",     // Root error of type Z502: "Not wellformed"
 "Z5K2": {
  "Z1K1": "Z502",
  "Z502K1": "Z526",  // What's the internal error? Z526 
  "Z502K2": {        // Okay, let's see it.
   "Z1K1": "Z5",
   "Z5K1": "Z526",         // Non terminal error of type Z526: "Key value not wellformed"
   "Z5K2": {
    "Z1K1": "Z526",
    "Z526K1": "Z3K3",      // Which is the non-valid key? "Z3K3"
    "Z526K2": {            // Okay, why?
     "Z1K1": "Z5",
     "Z5K1": "Z526",       // Non terminal error of type Z526: "Key value not wellformed"
     "Z5K2": {
      "Z1K1": "Z526",
      "Z526K1": "Z12K1",   // Which is the non-valid key? "Z12K1"
      "Z526K2": {          // Again, why?
       "Z1K1": "Z5",
       "Z5K1": "Z522",     // Non terminal error of type Z522: "Array element not wellformed"
       "Z5K2": {
        "Z1K1": "Z522",
        "Z522K1": "0",     // Which element is not valid? The one with index "0"
        "Z522K2": {        // What's wrong with it?
         "Z1K1": "Z5",
         "Z5K1": "Z509",   // Z509: "List of errors" error
         "Z5K2": {
          "Z1K1": "Z509",
          "Z509K1": [
           {
            "Z1K1": "Z5",        // First error from the list, a terminal one:
            "Z5K1": "Z511",      // Z511: "Key not found" error
            "Z5K2": {
             "Z1K1": "Z511",
             "Z511K1": "Z11K1",  // Which is the missing key? "Z11K1"
             "Z511K2": {         // Where is it missing from?
              "Z1K1": "Z99",
              "Z99K1": {         // From here.
               "Z1K1": "Z11"
              }
             }
            }
           },
           {
            "Z1K1": "Z5",        // Second error from the list, also a terminal one:
            "Z5K1": "Z511",      // Z511: "Key not found" error
            "Z5K2": {
             "Z1K1": "Z511",
             "Z511K1": "Z11K2",  // Which is the missing key? "Z11K2"
             "Z511K2": {         // Where is it missing from?
              "Z1K1": "Z99",
              "Z99K1": {         // From here.
               "Z1K1": "Z11"
              }
             }
            }
           }
          ]
         }
        }
       }
      }
     }
    }
   }
  }
 }
}

미리 정의된 오류 유형

미리 정의된 오류 유형은 Z500-Z599의 ZID 범위를 예약했습니다. 다음은 위키함수 스택의 다른 부분에서 현재 사용 중인 사전 정의된 모든 오류 유형의 목록입니다. 이 표는 인수, 이름 및 관련 범위에 대한 세부 정보도 제공합니다. 각 인수 뒤에 괄호 안에 인수가 취하는 값의 유형을 나타냅니다.


ZID Scope Arguments Name
Z500 global error information (Z1) Generic error
Z501 global error message (Z6), input (Z6) JSON syntax error
Z502 global subtype (Z50), value (Z5)  Not wellformed
Z503 executor feature name (Z6)  Not implemented yet
Z504 global ZID (Z6)  ZID not found
Z505 executor expected (Z6), actual (Z6), args (Z10)  Number of arguments mismatch
Z506 executor expected (Z4), actual (Z4), arg (Z1), propagated error (Z5) Argument type mismatch
Z507 executor function call (Z7), propagated error (Z5) Error in evaluation
Z508 executor key (Z39), object (Z99)  Competing keys
Z509 global errors (Z10) List of errors
Z510 - -   NIL
Z511 global key (Z39), object (Z99)  Key not found
Z512 global expected result (Z99), actual result (Z99)  Test failed
Z513 executor object (Z99)  Resolved persistent object without value
Z514 executor implementation (Z14)  Built-in does not exist
Z515 executor implementation (Z14)  Built-in ID is erroneous
Z516 executor argument (Z18), bad value (Z99)  Argument value error
Z517 executor expected type (Z4), actual type (Z4), returned value (Z1), propagated error (Z5) Return type mismatch
Z518 executor expected type (Z4), object (Z1), propagated error (Z5) Object type mismatch
Z519 global object (Z1) Undefined list type
Z520 global object (Z1) Wrong list type
Z521 global offending value (Z99)  ZObjects must not be a number or Boolean or null
Z522 global index of offending element (Z6), propagated error (Z5)  Array element not wellformed
Z523 global object (Z99)  Missing Z1K1
Z524 global value (Z99) Z1K1 must not be a string or array
Z525 global key (Z6) Invalid key
Z526 global key (Z39), propagated error (Z5)  Key value not wellformed
Z527 🆓
Z528 🆓
Z529 🆓
Z530 🆓
Z531 global object (Z99)  Z6 must have 2 keys
Z532 global object (Z99)   Z6 without a Z6K1
Z533 global value of Z6K1 (Z99)  Z6K1 must be a string
Z534 global object (Z99)  Z9 must have 2 keys
Z535 global object (Z99)  Z9 without a Z9K1
Z536 global value of Z9K1 (Z99)  Z9K1 must be a string
Z537 global value of Z9K1 (Z99)  Z9K1 must look like a reference
Z538 extension page title (Z6) Wrong namespace
Z539 extension page title (Z6) Wrong content type
Z540 extension language code (Z6) Invalid language code
Z541 extension language code (Z6) Language code not found
Z542 extension expected type (Z4), actual type (Z4) Unexpected ZObject type
Z543 extension type name (Z6) Type not found
Z544 extension type ZID (Z6), type name (Z6), existing type name (Z6) Conflicting type names
Z545 extension type ZID (Z6), type name (Z6), existing type ZID (Z6) Conflicting type ZIDs
Z546 extension type ZID (Z6), type name (Z6) Built-in type not found
Z547 global input (Z99) Invalid format
Z548 global error message (Z6), input (Z99) Invalid JSON
Z549 global reference value (Z6) Invalid reference
Z550 global reference value (Z6) Unknown reference
Z551 global key (Z39), expected type (Z6), actual type (Z6) Schema type mismatch
Z552 global index of offending element (Z6), expected type (Z4), actual content (Z99) Array element type mismatch
Z553 global root zobject (Z99) Disallowed root type
Z554 extension clashing ZID (Z6), language (Z6) Label for a given language clashes with another ZObject's label
Z555 extension ZID (Z6), page title (Z6) Unmatching ZID and page title
Z556 extension title (Z6) Invalid page title
Z557 extension message (Z6) User does not have permission to edit
Z558 global programming language (Z6) Invalid programming language
Z559 extension - User not permitted to evaluate function
Z560 orchestrator evaluation result (Z99) Invalid evaluation result
Z561 evaluator propagated error (Z5) Invalid evaluation request
Z562 evaluator missing property (Z6) Incomplete evaluation request
Z563 evaluator call (Z6) Call by non-reentrant executor
Z564 executor contents (Z6) Invalid executor response
Z565 executor missing property (Z6) Incomplete executor request
Z566 🆓
Z567 🆓
Z568 🆓
Z569 🆓
Z570 orchestrator orchestrator rate limit (Z6) Reached rate limit in orchestrator
Z571 evaluator evaluator rate limit (Z6) Reached rate limit in evaluator
Z572 orchestrator recursion limit (Z6), function name (Z6) Reached recursion limit in orchestrator
Z573 evaluator recursion limit (Z6), function name (Z6) Reached recursion limit in evaluator
Z574 orchestrator time limit (Z6) Reached time limit in orchestrator
Z575 evaluator time limit (Z6) Reached time limit in evaluator


나만의 오류 유형 만들기

사용자는 위키함수 UI에서 또는 위키함수 API를 통해 Z50/오류 유형 유형의 ZObject를 생성하여 사용자 지정 오류 유형을 정의할 수도 있습니다.

Z50/오류 유형 객체는 Z4/유형과 유사한 모양을 가지며 이 오류 유형의 인스턴스가 키 배열을 유일한 값(Z50K1)으로 정의합니다. 런타임에 생성해야 합니다. 각 키는 이를 설명하는 레이블이 있는 관련 정보입니다.

예를 들어 입력으로 전달된 날짜의 형식을 지정하는 함수를 만들고 싶다고 합시다. 날짜가 올바르지 않은 경우(예: "32/05/1985") "잘못된 날짜" 오류를 반환하려고 합니다. 이에 대해 특정 오류 유형을 생성합니다. 유형에는 입력으로 전달된 잘못된 날짜의 문자열 표현과 함께 하나의 키만 포함됩니다.

API wikilambda_edit를 사용하고 저장할 데이터로 다음 개체를 전달합니다.

{
  "Z1K1": "Z2",            // We create a persisted object
  "Z2K1": {                // With Zid Z0, as it will be automatically assigned
    "Z1K1": "Z6",
    "Z6K1": "Z0"
  },
  "Z2K2": {
    "Z1K1": "Z50",
    "Z50K1": [             // One key in the array under Z50K1
      {
        "Z1K1": "Z3",
        "Z3K1": "Z50",
        "Z3K2": "Z0K1",    // The Zid part of the key also is Z0
        "Z3K3": {          // With the label describing the key
          "Z1K1": "Z12",
          "Z12K1": [
            {
              "Z1K1": "Z11",
              "Z11K1": "Z1002",
              "Z11K2": "erroneous date"
            }
          ]
        }
      }
    ]
  },
  "Z2K3": {
    "Z1K1": "Z12",
    "Z12K1": [
      {
        "Z1K1": "Z11",
        "Z11K1": "Z1002",
        "Z11K2": "Incorrect date"    // And a label describing the error
      }
    ]
  }
}


호출이 성공하면(오류 형식이 정확하고 레이블이 고유한 경우 등) API는 이 오류 유형에 할당된 Zid를 반환합니다.

{
    "wikilambda_edit": {
        "success": "",
        "articleId": 1095,
        "title": "Z10000",
        "page": "Z10000"
    }
}

구현에서 오류를 발생시키는 방법

사용자가 사용할 수 있는 위키함수에는 두 가지 유형의 함수 구현이 있습니다. 지원되는 언어에서 프로그래밍 언어 코드로 지정된 것과 다른 위키함수 함수의 구성으로 지정된 것입니다. 여기에서는 이러한 각 구현 유형에서 오류를 발생시키는 방법을 보여줍니다.

코드

프로그래밍 언어 코드 구현에서 해당 프로그래밍 언어에서 제공하는 일반적인 방식으로 오류가 발생할 수 있습니다.(예를 들어 피이썬에서 구현은 raise 키워드와 예외 사양을 사용합니다. 자바스크립트에서는 throw 키워드와 예외 사양을 사용합니다.) 구현 실행을 담당하는 위키함수 시스템 코드는 예외를 포착하고 실행에서 반환될 적절한 Z5 / Error 객체로 패키징합니다. (특히, 파이썬에서 결과 Z5 / Error 객체는 잡힌 예외 e에서 추출된 e.args[0]의 값을 포함합니다. 자바스크립트에서는 e에서 추출한 e.message의 값을 포함합니다.) 모든 위키함수 함수 호출은 Z22 / 평가 결과 객체를 반환합니다. 결과 Z5 / Error 객체는 Z22K2 / metadata 키의 값으로 반환됩니다.

구성

구성 구현에서 Z820 / 트리거 메타데이터 함수에 Z7 / 함수 호출을 지정하고 Z5 / 오류를 전달하면 오류가 발생할 수 있습니다. code> 개체를 해당 함수의 Z820K1 / error 인수 값으로 사용합니다. Z502 / not well-formed error 유형의 오류를 가정할 때 이러한 호출은 다음과 같습니다.

{
 "type": "Function call",
 "function": "Trigger metadata",
 "error": {
  "type": "Error",
  "error type": "not well-formed error",
  "error value": {
   ...
  }
 }
}
{
 "Z1K1": "Z7",
 "Z7K1": "Z820",
 "Z820K1": {
  "Z1K1": "Z5",
  "Z5K1": "Z502",
  "Z5K2": {
   ...
  }
 }
}

Z820/트리거 메타데이터를 호출하면 컴포지션 실행에서 지정된 Z5/오류 개체가 반환됩니다(Z22 / Evaluation result 개체의 Z22K2 / metadata 키 값으로).