KCL Errors and Warnings
The articles in this section of the documentation explain the diagnostic error and warning messages that are generated by the KCL.
Important: The KCL can report many kinds of errors and warnings. After an error or warning is found, the build tools may make assumptions about code intent and attempt to continue, so that more issues can be reported at the same time. If the tools make the wrong assumption, later errors or warnings may not apply to your project. When you correct issues in your project, always start with the first error or warning that's reported and rebuild often. One fix may make many subsequent errors go away.
In the following sections you will find:
KCL Syntax Error (E1xxx) : The KCL may reports KCL syntax errors when illegal syntax is used in KCL program.
KCL Compile Error (E2xxx): The KCL may reports KCL compile errors when the KCL program conforms to the KCL syntax but does not conform to the KCL semantics.
KCL Runtime Error (E3xxx): The KCL may report KCL runtime errors when the virtual machine executing a KCL program that passes the compilation.
KCL Compile Warning (W2xxx): When the compiler compiles KCL programs and finds possible potential errors, such warnings will be reported by KCL.
1.1 KCL Syntax Error (E1xxx)
This section mainly includes KCL errors:
ewcode | KCL exception | messages |
---|---|---|
E1001 | InvalidSyntaxError | Invalid syntax |
E1002 | KCLTabError | Tab Error |
E1003 | KCLIndentationError | Indentation Error |
E1I37 | IllegalArgumentSyntaxError | Illegal argument syntax |
1.1.1 InvalidSyntaxError (E1001)
KCL will report InvalidSyntaxError
when KCL has a syntax error.
The ewcode
of InvalidSyntaxError
is E1001
.
For example:
a, b = 1, 2 # Multiple assign is illegal in KCL syntax
The KCL program will cause the following error message.
KCL Syntax Error[E1001] : Invalid syntax
---> File /syntax_error/general/multiple_assign/case0/main.k:1:6
1 |a = 1, 2
6 ^ -> Expected one of ['newline']
Invalid syntax
Possible resolution:
- Check and fix KCL syntax errors based on the KCL Language Standard
1.1.2 KCLTabError (E1002)
KCL will report KCLTabError
when KCL has a tab and white space syntax error.
In KCL, it is forbidden to mix tabs and four spaces in one indentation block. And we recommend only using white spaces or tabs for indentation in the entire KCL project, don’t mix them.
The ewcode
of KCLTabError
is E1002
.
For example:
schema Person:
name: str # begin with a tab
age: int # begin with four white spaces,
# and four white spaces != tab in the env
The KCL program will cause the following error message.
KCL Syntax Error[E1002] : Tab Error
---> File /syntax_error/tab/tab_error_0/main.k:2:14
2 | name: str
14 ^ -> Failure
Inconsistent use of tabs and spaces in indentation
Possible resolution:
- Only use a tab or four white spaces in KCL, do not mix them.
1.1.3 KCLIndentationError(E1003)
KCL will report KCLIndentationError
when KCL has an indentation syntax error.
The KCL syntax includes indentation. A tab or four white spaces in KCL represents an indentation. The other cases will be regarded as syntax errors by KCL.
The ewcode
of KCLIndentationError
is E1003
.
For example:
schema Person:
name: str # a tab or four white spaces is legal.
age: int # three white spaces are illegal
info: str # two white spaces is illegal
The KCL program will cause the following error message.
KCL Syntax Error[E1003] : Indentation Error
---> File /syntax_error/indent/indent_error_0/main.k:2:14
2 | name: str
14 ^ -> Failure
Unindent 3 does not match any outer indentation level
Possible resolution:
- Only use a tab or four white spaces in the KCL program for indentation.
1.1.4 IllegalArgumentSyntaxError (E1I37)
KCL will report IllegalArgumentSyntaxError
when KCL has an illegal argument in KCL syntax.
The ewcode
of IllegalArgumentSyntaxError
is E1I37
.
For example:
# Parameters without default values
# must be in front of parameters with default values.
a = option(type="list", default={"key": "value"}, "key1")
The KCL program will cause the following error message.
KCL Syntax Error[E1I37] : Illegal argument syntax
---> File /option/type_convert_fail_2/main.k:1:51
1 |a = option(type="list", default={"key": "value"}, "key1")
51 ^^^^^^ -> Failure
positional argument follows keyword argument
Possible resolution:
func(input_1, ..., input_n,
param_with_key_1 = input_with_key_1, ..., param_with_key_n = input_with_key_n)
1.2 KCL Compile Error (E2xxx)
This section mainly includes KCL errors:
ewcode | KCL exception | messages |
---|---|---|
E2F04 | CannotFindModule | Cannot find the module |
E2F05 | FailedLoadModule | Failed to load module |
E2H13 | UnKnownDecoratorError | UnKnown decorator |
E2H14 | InvalidDecoratorTargetError | Invalid Decorator Target |
E2C15 | MixinNamingError | Illegal mixin naming |
E2C16 | MixinStructureIllegal | Illegal mixin structure |
E2B17 | CannotAddMembersComplieError | Cannot add members to a schema |
E2B20 | IndexSignatureError | Invalid index signature |
E2G22 | TypeComplieError | The type got is inconsistent with the type expected |
E2L23 | CompileError | A complie error occurs during compiling |
E2L25 | KCLNameError | Name Error |
E2L26 | KCLValueError | Value Error |
E2L27 | KCLKeyError | Key Error |
E2L28 | UniqueKeyError | Unique key error |
E2A29 | KCLAttributeComplieError | Attribute error occurs during compiling |
E2D32 | MultiInheritError | Multiple inheritance is illegal |
E2D34 | IllegalInheritError | Illegal inheritance |
E2I36 | IllegalArgumentComplieError | Illegal argument during compiling |
E3L41 | ImmutableCompileError | Immutable variable is modified |
1.2.1 CannotFindModule(E2F04)
KCL will report CannotFindModule
when KCL imports a module that does not exist.
The ewcode
of CannotFindModule
is E2F04
.
For example:
import .some0.pkg1 as some00 # some0 not found in package
Name1 = some00.Name # some0.pkg1.name
The KCL program will cause the following error message.
KCL Complier Error[E2F04] : Cannot find the module
---> File import_abs_fail_0/app-main/main.k:1:1
1 |import .some0.pkg1 as some00 # some0 not found in app-main package
1 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -> Failure
Cannot find the module .some0.pkg1 from import_abs_fail_0/app-main/some0/pkg1
Possible resolution:
- Add the import module file under the import path.
1.2.2 FailedLoadModule(E2F05)
KCL will report FailedLoadModule
when an error occurs during loading a KCL external package.
The ewcode
of FailedLoadModule
is E2F05
.
Possible resolution:
- Check whether the module file is readable.
- Check whether the module file is a KCL file.
1.2.3 UnKnownDecoratorError(E2H13)
KCL will report UnKnownDecoratorError
when an unknown decorator is used in KCL.
The ewcode
of UnKnownDecoratorError
is E2H13
.
For example:
@err_deprecated # It is an unknown decorator
schema Person:
firstName: str = "John"
lastName: str
name: str
JohnDoe = Person {
name: "deprecated"
}
The KCL program will cause the following error message.
KCL Complier Error[E2H13] : UnKnown decorator
---> File deprecated/unknown_fail_1/main.k:1:2
1 |@err_deprecated
2 ^ -> Failure
UnKnown decorator err_deprecated
Possible resolution:
- Check whether the decorator exists.
1.2.4 InvalidDecoratorTargetError(E2H14)
KCL will report InvalidDecoratorTargetError
when the target cannot be the target of the decorator.
The ewcode
of InvalidDecoratorTargetError
is E2H14
.
Possible resolution:
- Check whether the decorator in KCL is illegal.
1.2.5 MixinNamingError(E2C15)
KCL will report MixinNamingError
when a mixin name does not end with 'Mixin'.
The ewcode
of MixinNamingError
is E2C15
.
For example:
schema Person:
firstName: str
lastName: str
fullName: str
schema Fullname: # It is a mixin, but 'Fullname' is not end with 'Mixin
fullName = "{} {}".format(firstName, lastName)
schema Scholar(Person):
mixin [Fullname]
school: str
JohnDoe = Scholar {
"firstName": "John",
"lastName": "Doe",
"fullName": "Doe Jon"
}
The KCL program will cause the following error message.
KCL Complier Error[E2C15] : Illegal mixin naming
---> File mixin/invalid_name_failure/main.k:10:12
10 | mixin [Fullname]
12 ^ -> Failure
a valid mixin name should end with 'Mixin', got 'Fullname'
Possible resolution:
- If the schema is a mixin, then the name of the schema should end with Mixin.
1.2.6 MixinStructureIllegal(E2C16)
KCL will report MixinStructureIllegal
when the KCL structure is illegal.
The ewcode
of MixinStructureIllegal
is E2C16
.
Possible resolution:
- Check the structure of schema as Mixin.
1.2.7 CannotAddMembersComplieError(E2B17)
KCL will report CannotAddMembersComplieError
when members that are not in the schema are used.
The ewcode
of CannotAddMembersComplieError
is E2B17
.
For example:
schema Girl:
gender: str = "female"
alice = Girl {
"first": "alice", # "first" can not be found in schema Girl
"last": " Green", # "last" can not be found in schema Girl
"age": 10 # "age" can not be found in schema Girl
}
The KCL program will cause the following error message.
KCL Complier Error[E2B18] : Cannot add members to a schema
---> File /invalid/add_attribute/main.k:9:9
9 |alice = Girl {
9 ^ -> Failure
first,last,age: No such member in the schema
Possible resolution:
- Add the members to the schema.
- Remove the using of the members not exists
1.2.8 IndexSignatureError(E2B20)
The ewcode
of IndexSignatureError
is E2B20
.
KCL will report IndexSignatureError
when:
- Multiple index signatures in one schema.
For example:
schema Data:
[str]: str
[str]: int # Multiple index signatures in one schema.
data = Data {
name: "test"
}
The KCL program will cause the following error message.
KCL Complier Error[E2B20] : Invalid index signature
---> File index_signature/fail_1/main.k:3:5
3 | [str]: int
5 ^^^^^^^^^^ -> Failure
only one index signature is allowed in the schema
Possible resolution:
- Remove the extra index signature in the schema.
- The name of index signature attributes has the same name that conflicts with other attributes in the schema.
For example:
schema Data:
name: str # name
[name: str]: str # the same name with the above attribute
data = Data {
name: "test"
}
The KCL program will cause the following error message.
KCL Complier Error[E2B20] : Invalid index signature
---> File index_signature/fail_2/main.k:3:5
3 | [name: str]: str
5 ^ -> Failure
index signature attribute name 'name' cannot have the same name as schema attributes
Possible resolution:
- Remove attributes or index signatures that have conflicts with the same name in the schema, or change their names.
- Schema index signature value type has conflicts with the instance of schema.
For example:
schema Data:
[str]: int
data = Data {
name: "test" # Conflict with [str]:int, "test" is a string.
}
The KCL program will cause the following error message.
KCL Complier Error[E2L23] : A complie error occurs during compiling
---> File index_signature/fail_3/main.k:4:8
4 |data = Data {
8 ^ -> Failure
expected schema index signature value type int, got str(test) of the key 'name'
Possible resolution:
- Check that the type of schema index signature is consistent with the attribute type in the schema instance.
- Schema index signature has conflicts with schema.
For example:
schema Data:
count: int # got int
[str]: str # except str
data = Data {
count: 1
}
The KCL program will cause the following error message.
KCL Complier Error[E2B20] : Invalid index signature
---> File index_signature/fail_4/main.k:2:5
2 | count: int
5 ^ -> Failure
the type 'int' of schema attribute 'count' does not meet the index signature definition [str]: str
Possible resolution:
- Change schema for index signature or change index signature for schema.
1.2.9 TypeComplieError(E2G22)
KCL will report TypeComplieError
when a type error occurs in compiling type check.
The ewcode
of TypeComplieError
is E2G22
.
For example:
schema Person:
firstName: str
lastName: int
JohnDoe = Person {
"firstName": "John",
"lastName": "Doe" # Type Error,lastName: int,“Doe” is a string.
}
The KCL program will cause the following error message.
KCL Complier Error[E2G22] : The type got is inconsistent with the type expected
---> File type/type_fail_0/main.k:7:5
7 | "lastName": "Doe"
5 ^ -> Failure
expect int, got str(Doe)
Possible resolution:
- Check that the type of value assigned to a variable is consistent with the type of the variable.
1.2.10 CompileError(E2L23)
The ewcode
of CompileError
is E2L23
.
KCL will report CompileError
when:
- unsupport type union.
For example:
_data = [1, 2, 3]
_data |= "value"
The KCL program will cause the following error message.
KCL Complier Error[E2L23] : A complie error occurs during compiling
---> File union/fail/fail_1/main.k:2
2 |_data |= "value" -> Failure
unsupported operand type(s) for |=: '[int]' and 'str(value)'
Possible resolution:
- unsupported operand type.
For example:
a = None
b = 1 + None # Unsupport operand type + for int and None
The KCL program will cause the following error message.
KCL Complier Error[E2L23] : A complie error occurs during compiling
---> File operator/operator_fail_0/main.k:2
2 |b = 1 + None -> Failure
unsupported operand type(s) for +: 'int(1)' and 'NoneType'
Possible resolution:
- Adjust the operator so that it supports both operand types.
- Adjust the operands so that they conform to the constraints of the operator at the same time.
- variable is not defined.
For example:
a = 1
b = "${c + 1}" # 'c' is not defined
The KCL program will cause the following error message.
KCL Complier Error[E2L23] : A complie error occurs during compiling
---> File var_not_define_fail_0/main.k:2:8
2 |b = "${c + 1}"
8 ^ -> Failure
name 'c' is not defined
Possible resolution:
- Define undefined variables.
- Remove the undefined variable from the expression.
- invalid assign expression.
For example:
# pkg.k
a = 1
# main.k
import pkg
pkg.a |= 2
The KCL program will cause the following error message.
KCL Complier Error[E2L23] : A complie error occurs during compiling
---> File pkg_inplace_modify_1/main.k:3:1
3 |pkg.a |= 2
1 ^^^^^ -> Failure
module 'pkg' can't be assigned
Possible resolution:
- Check the assignment expression.
- invalid string expression.
For example:
a = 1
b = "${b = a + 1}" # Invalid string interpolation expression
The KCL program will cause the following error message.
KCL Complier Error[E2L23] : A complie error occurs during compiling
---> File invalid_format_value_fail_0/main.k:2:5
2 |b = "${b = a + 1}"
5 ^^^^^^^^^^^^^^ -> Failure
invalid string interpolation expression 'b = a + 1'
Possible resolution:
- Check the string expression.
- invalid loop variable.
For example:
data = {"key1": "value1", "key2": "value2"}
dataLoop = [i for i, j, k in data] # the number of loop variables can only be 1 or 2
The KCL program will cause the following error message.
KCL Complier Error[E2L23] : A complie error occurs during compiling
---> File dict/invalid_loop_var_fail_0/main.k:2:19
2 |dataLoop = [i for i, j, k in data] # error
19 ^^^^^^^ -> Failure
the number of loop variables is 3, which can only be 1 or 2
1.2.11 KCLNameError(E2L25)
KCL will report KCLNameError
when a name error occurs in compiling.
The ewcode
of KCLNameError
is E2L25
.
1.2.12 KCLValueError(E2L26)
KCL will report KCLValueError
will be raised when a value error occurs in compiling.
The ewcode
of KCLValueError
is E2L25
.
1.2.13 KCLKeyError(E2L27)
KCL will report KCLKeyError
will be raised when a key error occurs in compiling.
The ewcode
of KCLKeyError
is E2L25
.
1.2.14 UniqueKeyError(E2L28)
KCL will report UniqueKeyError
when duplicate names appear in the KCL code.
The ewcode
of UniqueKeyError
is E2L28
.
For example:
schema Person:
name: str = "kcl"
age: int = 1
schema Person:
aa: int
x0 = Person{}
x1 = Person{age:101}
The KCL program will cause the following error message.
KCL Complier Error[E2L28] : Unique key error
---> File /schema/same_name/main.k:5:1
5 |schema Person:
1 ^ -> Failure
Variable name 'Person' must be unique in package context
Possible resolution:
- Check if the name with error has been used.
1.2.15 KCLAttributeComplieError(E2A29)
KCL will report KCLAttributeComplieError
when KCL has an illegal attribute in the schema.
The ewcode
of KCLAttributeComplieError
is E2A29
.
For example:
# pkg
schema A:
field_A: str
# main
import pkg as p
a = p.D + 1
The KCL program will cause the following error message.
KCL Complier Error[E2A29] : Attribute error occurs during compiling
---> File /import/module/no_module_attr_fail_0/main.k:3:5
3 |a = p.D + 1
5 ^ -> Failure
module 'pkg' has no attribute 'D'
Possible resolution:
- Check for the existence of the schema attribute when using it.
1.2.16 MultiInheritError(E2D32)
KCL will report MultiInheritError
when multiple inheritance appears in the schema.
The ewcode
of MultiInheritError
is E2D32
.
For example:
schema Person:
firstName: str
lastName: str
schema KnowledgeMixin:
firstName: int
subject: str
schema Scholar(KnowledgeMixin, Person):
school: str
The KCL program will cause the following error message.
KCL Complier Error[E2D32] : Multiple inheritance is illegal
---> File /schema/inherit/multi_inherit_fail_1/main.k:9:16
9 |schema Scholar(KnowledgeMixin, Person):
16 ^^^^^^^^^^^^^^^^^^^^^^ -> Failure
Multiple inheritance of Scholar is prohibited
Possible resolution:
- Check the inheritance structure of the program, and multi-inheritance is not supported in KCL.
1.2.17 IllegalInheritError(E2D34)
KCL will report IllegalInheritError
when an illegal inheritance occurs in the schema.
The ewcode
of IllegalInheritError
is E2D34
.
For example:
schema FullnameMixin:
fullName = "{} {}".format(firstName, lastName)
schema Scholar(FullnameMixin): # mixin inheritance is illegal
school: str
The KCL program will cause the following error message.
KCL Complier Error[E2D34] : Illegal inheritance
---> File /schema/inherit/inherit_mixin_fail/main.k:8:1
8 |schema Scholar(FullnameMixin):
1 ^ -> Failure
mixin inheritance FullnameMixin is prohibited
Possible resolution:
- Schema supports single inheritance of schema in KCL.
1.2.18 IllegalArgumentComplieError(E2I36)
KCL will report IllegalArgumentComplieError
when the argument of option in KCL is illegal.
The ewcode
of IllegalArgumentComplieError
is E2I36
.
For example:
a = option("key")
# kcl main.k -D key=value=
# key=value= is an illegal expression
The KCL program will cause the following error message.
KCL Complier Error[E2I36] : Illegal argument during compiling
'key=value='
Possible resolution:
- Check whether the KCL option arguments are legal.
1.2.19 ImmutableCompileError (E3L41)
KCL will report ImmutableCompileError
when the value of the immutable variable changes.
The ewcode
of ImmutableCompileError
is E3L41
.
For example:
a = 2147483646
a += 1
The KCL program will cause the following error message.
KCL Compile Error[E2L41] : Immutable variable is modified
---> File /range_check_int/augment_assign/main.k:2:1
2 |a += 1
1 ^ -> Failure
Immutable variable is modified
Possible resolution:
- Set immutable variables changed to private or remove immutable variables.
1.3 KCL Runtime Error (E3xxx)
This section mainly includes KCL errors:
ewcode | KCL exception | messages |
---|---|---|
E3F06 | RecursiveLoad | Recursively loading module |
E3K04 | FloatOverflow | Float overflow |
E3K09 | IntOverflow | Integer overflow |
E3N11 | DeprecatedError | Deprecated error |
E3A30 | KCLAttributeRuntimeError | Attribute error occurs at runtime |
E3G21 | TypeRuntimeError | The type got is inconsistent with the type expected |
E3B17 | SchemaCheckFailure | Schema check is failed to check condition |
E3B19 | CannotAddMembersRuntimeError | Cannot add members to a schema |
E3M38 | EvaluationError | Evaluation failure |
E3M39 | InvalidFormatSpec | Invalid format specification |
E3M40 | KCLAssertionError | Assertion failure |
E3M44 | ImmutableRuntimeError | Immutable variable is modified |
E2D33 | CycleInheritError | Cycle Inheritance is illegal |
E3M42 | KCLRecursionError | Recursively reference |
1.3.1 RecursiveLoad (E3F06)
KCL will report RecursiveLoad
when a cycle import of external packages occurs in KCL.
The ewcode
of RecursiveLoad
is E2F06
.
For example:
# module.k
import main # module.k imports main.k
print('module')
# main.k
import module # main.k imports module.k
print('main')
The KCL program will cause the following error message.
KCL Runtime Error[E3F06] : Recursively loading module
---> File /import/recursive_import_fail/main.k:4
4 | -> Failure
In module module, recursively loading modules: module, main
Possible resolution:
- Check whether there is a circle import in KCL.
1.3.2 FloatOverflow (E3K04)
KCL will report FloatOverflow
when a floating-point number overflows in KCL.
The ewcode
of FloatOverflow
is E3K04
.
For example:
uplimit = 3.402823466e+38
epsilon = 2.220446049250313e-16
a = uplimit * (1 + epsilon)
# kcl main.k -r -d
The KCL program will cause the following error message.
KCL Runtime Error[E3K07] : Float overflow
---> File /range_check_float/overflow/number_0/main.k:6
6 |a = uplimit * (1 + epsilon) -> Failure
3.402823466000001e+38: A 32-bit floating point number overflow
Possible resolution:
- Check whether the value of the float is the float range supported by KCL.
1.3.3 IntOverflow (E3K09)
KCL will report IntOverflow
when an integer number overflows in KCL.
The ewcode
of IntOverflow
is E3K09
.
For example:
_a = 9223372036854775807
_a += 1
# kcl test.k -d
The KCL program will cause the following error message.
KCL Runtime Error[E3K09] : Integer overflow
---> File /range_check_int/augment_assign_fail_1/main.k:2
2 |_a += 1 -> Failure
9223372036854775808: A 64 bit integer overflow
Possible resolution:
- Check whether the value of the integer is the integer range supported by KCL.
1.3.4 DeprecatedError (E3N11)
KCL will report DeprecatedError
when a deprecated variable is used and the strict is True.
The ewcode
of DeprecatedError
is E3N11
.
For example:
schema Person:
firstName: str = "John"
lastName: str
@deprecated(version="1.16", reason="use firstName and lastName instead", strict=True)
name: str
JohnDoe = Person {
name: "deprecated" # name is deprecated and strict is True
}
The KCL program will cause the following error message.
KCL Runtime Error[E3N11] : Deprecated error
---> File /schema/deprecated/member_standard_1/main.k:7
7 |JohnDoe = Person { -> Failure
name was deprecated since version 1.16, use firstName and lastName instead
Possible resolution:
- When strict is set to True, using deprecated code will cause an error and stop KCL.
- You can set the strict to False which will cause a warning insteads of an error.
- Adjust the code without using deprecated code.
1.3.5 KCLAttributeRuntimeError (E3A30)
KCL will report KCLAttributeRuntimeError
, if an error occurs during dynamically accessing schema attributes through variables at runtime.
The ewcode
of KCLAttributeRuntimeError
is E3A30
.
For example:
import math
a = math.err_func(1) # err_func is not found in math
The KCL program will cause the following error message.
KCL Runtime Error[E3A30] : Attribute error occurs at runtime
---> File /import/module/no_module_attr_fail_2/main.k:3
3 |a = math.err_func(1) -> Failure
module 'math' has no attribute 'err_func'
Possible resolution:
- Check whether the attributes of schema are correct.
1.3.6 TypeRuntimeError (E3G21)
KCL will report TypeRuntimeError
when an type error occurs in the runtime type check.
The ewcode
of TypeRuntimeError
is E3G21
.
For example:
schema Person:
name: str = "Alice"
_personA = Person {}
_personA |= {"name": 123.0} # name: str = "Alice"
personA = _personA
The KCL program will cause the following error message.
KCL Runtime Error[E3G21] : The type got is inconsistent with the type expected
---> File /fail/fail_4/main.k:5
5 |_personA |= {"name": 123.0} -> Failure
expect str, got float
Possible resolution:
- Stop the wrong type union or adjust to the type union supported by KCL.
1.3.7 SchemaCheckFailure (E3B17)
KCL will report SchemaCheckFailure
when the schema check conditions are not met.
The ewcode
of SchemaCheckFailure
is E3B17
.
For example:
schema Person:
lastName: str
age: int
check:
age < 140, "age is too large"
JohnDoe = Person {
"lastName": "Doe",
"age": 1000 # the check condition: age < 140
}
The KCL program will cause the following error message.
KCL Runtime Error[E3B17] : Schema check is failed to check condition
---> File /check_block/check_block_fail_1/main.k:9:11
9 |JohnDoe = Person {
11 ^ -> Check failed in the schema
---> File /check_block/check_block_fail_1/main.k:7
7 | age < 140, "age is too large" -> Check failed on the condition
age is too large
Possible resolution:
- Check whether the attributes of schema can satisfy the conditions in check.
1.3.8 CannotAddMembersRuntimeError(E3B19)
KCL will report CannotAddMembersRuntimeError
when members that are not in the schema are used.
The ewcode
of CannotAddMembersRuntimeError
is E3B19
.
For example:
schema Name:
name: str
schema Person:
name: Name
person = Person {
name.err_name: "Alice" # err_name is not found in schema Name
}
The KCL program will cause the following error message.
KCL Runtime Error[E3B19] : Cannot add members to a schema
---> File /nest_var/nest_var_fail_1/main.k:8:5
8 | name.err_name: "Alice"
5 ^ -> Failure
err_name: No such member in the schema
Possible resolution:
- Add a non-existent member to the schema.
- Access members that exist in the schema.
1.3.9 EvaluationError(E3M38)
KCL will report EvaluationError
when an illegal evaluation occurs in KCL.
The ewcode
of EvaluationError
is E3M38
.
For example:
_list1 = [1, 2, 3] # _list1 is a variable, and its type can only be known at runtime
_list2 = None # _list1 is a variable, and its type can only be known at runtime
result2 = _list1 + _list2 # list + NoneType is illegal
The KCL program will cause the following error message.
KCL Runtime Error[E3M38] : Evaluation failure
---> File /datatype/list/add_None_fail/main.k:4
4 |result2 = _list1 + _list2 -> Failure
can only concatenate list (not "NoneType") to list
Possible resolution:
- Check whether the evaluation of the expression is legal.
1.3.10 InvalidFormatSpec (E3M39)
KCL will report InvalidFormatSpec
when an illegal string format appears in KCL.
The ewcode
of InvalidFormatSpec
is E3M39
.
For example:
a = 1
b = 1
data = "${a: #js}" + " $$ " # #js is illegal string
The KCL program will cause the following error message.
KCL Runtime Error[E3M39] : Invalid format specification
---> File /datatype/str_interpolation/invalid_format_spec_fail_0/main.k:3
3 |data = "${a: #js}" + " $$ " -> Failure
#js is invalid format spec
Possible resolution:
- Adjust illegal String to String supported by KCL standards.
1.3.11 KCLAssertionError (E3M40)
KCL will report KCLAssertionError
when assert False occurs in KCL.
The ewcode
of KCLAssertionError
is E3M40
.
For example:
assert False
The KCL program will cause the following error message.
KCL Runtime Error[E3M40] : Assertion failure
---> File /assert/invalid/fail_0/main.k:1
1 |assert False -> Failure
Assertion failure
Possible resolution:
- Check the condition of Assert, and when the Assert condition is False, such an error occurs, removing the Assert statement or changing the condition to True.
1.3.12 ImmutableRuntimeError (E3M44)
KCL will report ImmutableRuntimeError
when the value of the immutable variable changes.
The ewcode
of ImmutableRuntimeError
is E3M44
.
For example:
schema Person:
final firstName : str
lastName : str
schema Scholar(Person):
firstName = "CBA"
scholar = Scholar {
"firstName": "ABC" # firstName in schema Person is final.
}
The KCL program will cause the following error message.
KCL Runtime Error[E3M41] : Immutable variable is modified
---> File /final/fail_lazy_init_0/main.k:12:5
12 | "firstName": "ABC"
5 ^ -> Failure
final schema field 'firstName'
Possible resolution:
- Check if the final variables have been assigned or other changes affect the values of the final variables.
1.3.13 CycleInheritError (E2D33)
KCL will report CycleInheritError
when circle inheritance appeared in the schema.
The ewcode
of CycleInheritError
is E2D33
.
For example:
schema Parent(Son):
parent_field: str
schema Son(GrandSon):
son_field: str
schema GrandSon(Parent):
grandson_field: str
parent = Parent {
parent_field: ""
}
The KCL program will cause the following error message.
KCL Complier Error[E2D33] : Cycle Inheritance is illegal
---> File /inherit/cycle_inherit_fail_1/main.k:7:1
7 |schema GrandSon(Parent):
1 ^ -> Failure
GrandSon and Parent
Possible resolution:
- Check schema inheritance relationship to avoid A inheritance B and B inheritance A at the same time.
1.3.14 KCLRecursionError (E3M42)
KCL will report KCLRecursionError
when a circle reference appears in the program.
The ewcode
of KCLRecursionError
is E3M42
.
For example:
schema Parent(Son):
parent_field: str
son: Son = Son { # Parent has attribute Son
parent: Parent {
parent_field: "123"
}
}
schema Son:
son_field: str
parent: Parent = Parent { # Son has attribute Parent
son: Son {
son_field: "123"
}
}
parent = Parent {
parent_field: "",
}
The KCL program will cause the following error message.
KCL Runtime Error[E3M42] : Recursively reference
---> File /init/init_cycle_fail_0/main.k:10
10 | son_field: str -> Failure
maximum recursion depth exceeded in __instancecheck__
Possible resolution:
- Check the members in the schema to avoid the problem of circle references.
1.4 KCL Compile Warning (W2xxx)
This section mainly includes KCL warnings:
ewcode | KCL exception | messages |
---|---|---|
W2K04 | FloatUnderflow | Float underflow |
W2P10 | InvalidDocstring | Invalid docstring |
W2N12 | DeprecatedWarning | Deprecated warning |
1.4.1 FloatUnderflow (W2K04)
KCL will report FloatUnderflow
when a floating-point number underflows in KCL.
The ewcode
of FloatUnderflow
is W2K08
.
For example:
downlimit = 1.175494351e-38
uplimit = 3.402823466e+38
epsilon = 2.220446049250313e-16
a = uplimit / (1 + epsilon)
b = downlimit / (1 + epsilon)
# kcl main.k -r -d
The KCL program will cause the following error message.
KCL Complier Warning[W2K08] : Float underflow
---> File /range_check_float/underflow/number_0/main.k:7
7 |b = downlimit / (1 + epsilon) -> Failure
1.1754943509999997e-38: A 32-bit floating point number underflow
Possible resolution:
- Check whether the value of the float number is in the range supported by KCL.
1.4.2 InvalidDocstring (W2P10)
KCL will report InvalidDocstring
when a string is illegal in KCL doc.
The ewcode
of InvalidDocstring
is W2P10
.
Possible resolution:
- Please write doc according to KCL standards.
1.4.3 DeprecatedWarning (W2N12)
KCL will report DeprecatedWarning
when a deprecated variable is used and the strict is False.
The ewcode
of DeprecatedWarning
is W2N12
.
For example:
schema Person:
firstName?: str = "John"
lastName?: str
@deprecated(version="1.16", reason="use firstName and lastName instead", strict=False)
name?: str
JohnDoe = Person {
name: "deprecated" # name is deprecated and strict is False
}
The KCL program will cause the following error message.
KCL Compile Warning[W2N12] : Deprecated warning
name was deprecated since version 1.16, use firstName and lastName instead
Possible resolution:
- Try not to use deprecated code. If the strict is True, KCL will output the error and stop running.