# How to Convert Octal String to Integer in Python

## Problem Formulation

Given a string in the octal form:

```s = '0o77'
# or s = '77'```

How to convert the octal string to an integer in Python?

For example, you want to convert the octal string `'o10'` to the decimal integer `8`.

Here are a few other examples:

## Oct String to Integer using int() with Base 8

To convert an octal string to an integer, pass the string as a first argument into Python’s built-in `int()` function. Use `base=8` as a second argument of the `int()` function to specify that the given string is an octal number. The `int()` function will then convert the octal string to an integer with base 10 and return the result.

Here’s a minimal example:

```>>> int('0o77', base=8)
63```

## Examples

And here’s how you can convert the additional examples shown above:

```>>> int('0o0', base=8)
0
>>> int('0o4', base=8)
4
>>> int('0o10', base=8)
8
>>> int('0o14', base=8)
12
>>> int('0o20', base=8)
16
>>> int('0o77', base=8)
63
>>> int('0o77777', base=8)
32767```

You actually don’t need to use the prefix `'0o'` because your second argument already defines unambiguously that the given string is an octal number:

```>>> int('0', base=8)
0
>>> int('4', base=8)
4
>>> int('10', base=8)
8
>>> int('14', base=8)
12
>>> int('20', base=8)
16
>>> int('77', base=8)
63
>>> int('77777', base=8)
32767```

However, skipping the base but leaving the prefix raises a `ValueError: invalid literal for int() with base 10: '0o77'`:

```>>> int('0o77')
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
int('0o77')
ValueError: invalid literal for int() with base 10: '0o77'```

It assumes that the input string is in base 10 when in fact, it isn’t.

π‘ Note: Even though passing a prefixed string `'0o...'` into the `int()` function is unambiguous, Python’s `int()` function doesn’t accept it if you don’t also define the base. This may be fixed in future versions!

In fact, you can specify the base argument as `0` to switch on base guessing—which should be the default behavior anyway! π

## Base Guessing

You can pass a prefixed string `'0o...'` into the `int()` function and set the base to `0` to switch on base guessing in Python. This uses the prefix to determine the base automatically—without you needing to set it to `16`. Yet, you still have to set it to `0` so the benefit is marginal in practice.

```>>> int('0o7', base=8)
7
>>> int('0o7', base=0)
7
>>> int('0o7', 0)
7```

## Converting Octal Literals to Int

If you don’t have an octal string but a octal number—called a literal—such as `0xff`, you don’t even need the `int()` function because Python will automatically convert it to a decimal number:

```>>> 0o743
483
>>> 0o7
7
>>> 0o10
8```

## Background int()

`Syntax: `int(value [, base])    -->   int``

Do you still need more background information about Python’s built-in `int()` function? No problem, read over the related tutorial.

π Related Tutorial: Python’s Built-in `int()` Function