## 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:

Octal String | Decimal |
---|---|

`'0o0'` | 0 |

`'0o4'` | 4 |

`'0o10'` | 8 |

`'0o14'` | 12 |

`'0o20'` | 16 |

`'0o77'` | 63 |

`'0o77777'` | 32767 |

## 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`

Argument | `value` | A Python object to be converted into an integer number. The value object must have an `__int__()` method that returns the associated integer numberβotherwise a `TypeError` will be raised. |

`base` | An optional integer argument `base` to define the base of the numerical system in the `value` argument. If you set the base, the `value` argument must be a string. The `base` argument determines how the string argument is interpreted. | |

Return Value | `int` | Returns an integer number after converting the input argument `value` using its required `__int__()` method for the conversion. |

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

While working as a researcher in distributed systems, Dr. Christian Mayer found his love for teaching computer science students.

To help students reach higher levels of Python success, he founded the programming education website Finxter.com that has taught exponential skills to millions of coders worldwide. He’s the author of the best-selling programming books Python One-Liners (NoStarch 2020), The Art of Clean Code (NoStarch 2022), and The Book of Dash (NoStarch 2022). Chris also coauthored the Coffee Break Python series of self-published books. He’s a computer science enthusiast, freelancer, and owner of one of the top 10 largest Python blogs worldwide.

His passions are writing, reading, and coding. But his greatest passion is to serve aspiring coders through Finxter and help them to boost their skills. You can join his free email academy here.