The article aims to write C extension code that consumes items from any iterable object such as a list, tuple, file, or generator.
Code #1 : C extension function that shows how to consume the items on an iterable.
The code in above mirrors similar code in Python. The
PyObject_GetIter() call is the same as calling
iter() to get an iterator. The
PyIter_Next() function invokes the next method on the iterator returning the next item or NULL if there are no more items. Make sure you’re careful with memory management —
Py_DECREF() needs to be called on both the produced items and the iterator object itself to avoid leaking memory.
Diagnosing Segmentation Faults –
The interpreter violently crashes with a segmentation fault, bus error, access violation, or other fatal error. One likes to get a Python traceback that shows where the program was running at the point of failure.
The faulthandler module can be used to help you solve this problem. Include the following code in your program.
Code #2 :
Alternatively, run Python with the -Xfaulthandler option such as this:
bash % python3 -Xfaulthandler program.py
Last, but not least, the PYTHONFAULTHANDLER environment variable can be set accordingly. With faulthandler enabled, fatal errors in C extensions will result in a Python traceback being printed on failures. For example:
Fatal Python error: Segmentation fault Current thread 0x00007fff71106cc0: File "example.py", line 6 in foo File "example.py", line 10 in bar File "example.py", line 14 in spam File "example.py", line 19 in
Although this won’t tell where in the C code things went wrong, at least it can tell how it got there from Python.
The faulthandler will show the stack traceback of the Python code executing at the time of failure. At the very least, this will show the top-level extension function that was invoked. With the aid of pdb or other Python debugger, one can investigate the flow of the Python code leading to the error.
- Python | Difference between iterable and iterator
- Important differences between Python 2.x and Python 3.x with examples
- Creating and updating PowerPoint Presentations in Python using python - pptx
- Loops and Control Statements (continue, break and pass) in Python
- Python counter and dictionary intersection example (Make a string using deletion and rearrangement)
- Python | Using variable outside and inside the class and method
- Releasing GIL and mixing threads from C and Python
- Python | Boolean List AND and OR operations
- Difference between 'and' and '&' in Python
- Replace the column contains the values 'yes' and 'no' with True and False In Python-Pandas
- Ceil and floor of the dataframe in Pandas Python – Round up and Truncate
- Login Application and Validating info using Kivy GUI and Pandas in Python
- Python | Set 4 (Dictionary, Keywords in Python)
- Python | Sort Python Dictionaries by Key or Value
- Python | Merge Python key values to list
- Reading Python File-Like Objects from C | Python
- Python | Add Logging to a Python Script
- Python | Add Logging to Python Libraries
- Python | Visualizing O(n) using Python
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.