17

What are the big differences between raise AssertionError and assert to build in a "fault"? What are the effects on the code? And is one or the other more pythonic in a way?

The reason for my question is because I am learning to program. Right now we have an exercise where for example when x != 0 we need to get an AssertionError "false".

I looked this up online, where I found the following code:

if x != 0:
    raise AssertionError ("false")

But my teachers also use the following a lot:

assert x == 0,"fout"

What are the (dis)advantages of each approach?

Thanks a lot in advance.

NerdOnTour
  • 634
  • 4
  • 15
Jirka
  • 391
  • 1
  • 2
  • 14
  • Can you elaborate on your question a bit? Generally, assertions are for testing your code and finding bugs. `assert` statements can be ignored with compiler flags. – juanpa.arrivillaga Jan 23 '18 at 18:46
  • @juanpa.arrivillaga i explained it a bit more. Hope this helps :) – Jirka Jan 23 '18 at 18:53
  • As juanpa explained, the `assert` statement is generally for unit-testing or finding issues during the development process. This does not mean you will necessarily see the error. On the other hand, raising an `AssertionError` means that the error will be raised by the code, and that any calling processes can deal with this error as needed. – Brandon Barney Jan 23 '18 at 19:01
  • This may be useful as well: https://stackoverflow.com/questions/40182944/difference-between-raise-try-and-assert – Brandon Barney Jan 23 '18 at 19:01
  • @Brandon Barney. So if I got this correct you use assert during development but then for the finished program you use Assertionerror. Or not quite ? And can you give an example of not seeing an error ? I don't quite see how that can happen .. – Jirka Jan 23 '18 at 19:04

1 Answers1

19

Those two code examples are equivalent, with the exception that assert statements can be globally disabled with the -O command-line flag.

John Gordon
  • 29,573
  • 7
  • 33
  • 58
  • This command-line flag. Is this something I manually enter? (I have never heard of this before and a first google round hasn't bin helpful) – Jirka Jan 23 '18 at 19:24
  • 1
    When you run your code by typing `python myscript.py`, you can instead type `python -O myscript.py`. (If you run code from an IDE instead of the command-line, your IDE probably has an option somewhere to achieve the same effect.) – John Gordon Jan 23 '18 at 20:00
  • It can also make a difference to [`pylint`](https://github.com/PyCQA/pylint/issues/2908). – rookie099 May 31 '20 at 16:05