1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
|
---
title: Exceptions
toc: true
---
# Strawberry Exceptions
Strawberry defines its library-specific exceptions in `strawberry.exceptions`.
## Strawberry Schema Exceptions
### FieldWithResolverAndDefaultFactoryError
This exception is raised when `strawberry.field` is used with both `resolver`
and `default_factory` arguments.
```python
@strawberry.type
class Query:
@strawberry.field(default_factory=lambda: "Example C")
def c(self) -> str:
return "I'm a resolver"
# Throws 'Field "c" on type "Query" cannot define a default_factory and a resolver.'
```
### FieldWithResolverAndDefaultValueError
This exception is raised when `strawberry.field` is used with both `resolver`
and `default` arguments.
```python
def test_resolver() -> str:
return "I'm a resolver"
@strawberry.type
class Query:
c: str = strawberry.field(default="Example C", resolver=test_resolver)
# Throws 'Field "c" on type "Query" cannot define a default value and a resolver.'
```
### MissingTypesForGenericError
This exception is raised when a `Generic` type is added to the Strawberry Schema
without passing any type to make it concrete.
### MultipleStrawberryArgumentsError
This exception is raised when `strawberry.argument` is used multiple times in a
type annotation.
```python
import strawberry
from typing_extensions import Annotated
@strawberry.field
def name(
argument: Annotated[
str,
strawberry.argument(description="This is a description"),
strawberry.argument(description="Another description"),
],
) -> str:
return "Name"
# Throws 'Annotation for argument `argument` on field `name` cannot have multiple `strawberry.argument`s'
```
### UnsupportedTypeError
This exception is thrown when the type-annotation used is not supported by
`strawberry.field`. At the time of writing this exception is used by Pydantic
only
```python
class Model(pydantic.BaseModel):
field: pydantic.Json
@strawberry.experimental.pydantic.type(Model)
class Type:
field: strawberry.auto
```
### WrongNumberOfResultsReturned
This exception is raised when the DataLoader returns a different number of
results than requested.
```python
async def idx(keys):
return [1, 2]
loader = DataLoader(load_fn=idx)
await loader.load(1)
# Throws 'Received wrong number of results in dataloader, expected: 1, received: 2'
```
## Runtime exceptions
Some errors are also thrown when trying to exectuing queries (mutations or
subscriptions).
### MissingQueryError
This exception is raised when the `request` is missing the `query` parameter.
```python
client.post("/graphql", data={})
# Throws 'Request data is missing a "query" value'
```
## UnallowedReturnTypeForUnion
This error is raised when the return type of a `Union` is not in the list of
Union types.
```python
@strawberry.type
class Outside:
c: int
@strawberry.type
class A:
a: int
@strawberry.type
class B:
b: int
@strawberry.type
class Mutation:
@strawberry.mutation
def hello(self) -> Union[A, B]:
return Outside(c=5)
query = """
mutation {
hello {
__typename
... on A {
a
}
... on B {
b
}
}
}
"""
result = schema.execute_sync(query)
# result will look like:
# ExecutionResult(
# data=None,
# errors=[
# GraphQLError(
# "The type \"<class 'schema.Outside'>\" of the field \"hello\" is not in the list of the types of the union: \"['A', 'B']\"",
# locations=[SourceLocation(line=3, column=9)],
# path=["hello"],
# )
# ],
# extensions={},
# )
```
## WrongReturnTypeForUnion
This exception is thrown when the Union type cannot be resolved because it's not
a `strawberry.field`.
```python
@strawberry.type
class A:
a: int
@strawberry.type
class B:
b: int
@strawberry.type
class Query:
ab: Union[A, B] = "ciao" # missing `strawberry.field` !
query = """{
ab {
__typename,
... on A {
a
}
}
}"""
result = schema.execute_sync(query, root_value=Query())
# result will look like:
# ExecutionResult(
# data=None,
# errors=[
# GraphQLError(
# 'The type "<class \'str\'>" cannot be resolved for the field "ab" , are you using a strawberry.field?',
# locations=[SourceLocation(line=2, column=9)],
# path=["ab"],
# )
# ],
# extensions={},
# )
```
|