# tf.errors.PermissionDeniedError

<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/tensorflow/blob/v2.13.1/tensorflow/python/framework/errors_impl.py#L338-L351) |

Raised when the caller does not have permission to run an operation.

Inherits From: [`OpError`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/errors/OpError)

#### View aliases


**Compat aliases for migration**

See
[Migration guide](https://www.tensorflow.org/guide/migrate) for
more details.

[`tf.compat.v1.errors.PermissionDeniedError`](https://www.tensorflow.org/api_docs/python/tf/errors/PermissionDeniedError)

<br />

    tf.errors.PermissionDeniedError(
        node_def, op, message, *args
    )

For example, running the
`tf.WholeFileReader.read`
operation could raise `PermissionDeniedError` if it receives the name of a
file for which the user does not have the read file permission.

<br />

<br />

<br />

| ## Attributes ||
|---|---|
| `error_code` | The integer error code that describes the error. |
| `experimental_payloads` | A dictionary describing the details of the error. |
| `message` | The error message that describes the error. |
| `node_def` | The `NodeDef` proto representing the op that failed. |
| `op` | The operation that failed, if known. <br /> > [!NOTE] > **Note:** If the failed op was synthesized at runtime, e.g. a `Send` or `Recv` op, there will be no corresponding [`tf.Operation`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/Operation) object. In that case, this will return `None`, and you should instead use the [`tf.errors.OpError.node_def`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/errors/OpError#node_def) to discover information about the op. |