erg/doc/EN/compiler/errors.md

131 lines
2.6 KiB
Markdown

# Erg Compiler Errors
## AssignError
Raised when attempting to rewrite an immutable variable.
## AttributeError
Raised when trying to access an attribute that does not exist.
## PurityError
Raised when writing code that causes side effects in scopes (functions, immutable types, etc.) where side effects are not allowed.
## MoveError
Raised when you try to access a variable that has already been moved.
## BorrowError
Raised when an attempt is made to obtain another variable reference while a borrow exists for an object.
## CyclicError
Raised when there is an apparent non-stop cycle.
```python
i: Int = i
f(): Int = g()
g() = f()
h(): Int = module::h()
T = U
U = T
```
## BytecodeError
Raised if the bytecode read is corrupt.
## CompileSystemError
Raised when an error occurs inside the compiler.
## EnvironmentError
Raised when there is no access permission during installation.
## FeatureError
Raised when an experimental feature that is not officially provided is detected.
## ImportError
## IndentationError
Raised when an invalid indentation is detected.
Derived from SyntaxError.
## NameError
Raised when accessing a variable that does not exist.
## NotImplementedError
Raised when calling an API that has a definition but no implementation.
Derived from TypeError.
## PatternError
Raised when an invalid pattern is detected.
Derived from SyntaxError.
## SyntaxError
Raised when an invalid syntax is detected.
## TabError
Raised when a tab character is used for indentation/space.
Derived from SyntaxError.
## TypeError
Raised when the object type does not match.
## UnboundLocalError
Raised when a variable is used before it is defined.
More precisely, it occurs when a variable defined in a scope is used before it is defined.
```python
i = 0
f x =
y = i + x
i = 1
y + i
```
In this code, the `i` in `y = i + x` is an undefined variable.
However, if it is a constant, it can be called in another function before it is defined.
```python
f() = g()
g() = f()
```
## Erg Compiler Warnings
## SyntaxWarning
This happens when syntactically sound but redundant or uncommon code is detected (e.g., unnecessary `()`).
```python
if (True): # SyntaxWarning: unnecessary parentheses
...
```
## DeprecationWarning
Raised if the referenced object is deprecated.
(Developers should always provide an alternative Hint when raising this Warning.)
## FutureWarning
Raised when code is detected that may cause problems in the future.
This warning is caused by version compatibility issues (including libraries) or changes in syntax or API.
## ImportWarning