За и против Ctypes

Используйте стандартные исключения! Если у Вас есть определенная ошибка, старайтесь избегать ее с возвращаемым значением. Если Вы имеете , чтобы использовать исключения, определить Ваше пользовательское исключение, которое наследовалось Исключению, и создайте пользовательское сообщение.

7
задан Brian R. Bondy 28 March 2010 в 13:02
поделиться

4 ответа

С точки зрения надежности, я все еще считаю, что swig в некоторой степени превосходит ctypes, потому что компилятор C может проверять вещи более тщательно; Однако, это довольно спорный вопрос сейчас (в то время как он маячил больше в предыдущем ctypes полнотекстовых), благодаря argtypes особенность @Mark уже упоминалась. Однако,

13
ответ дан 6 December 2019 в 07:51
поделиться

ctypes - безопасный модуль для использования, если вы используете его правильно.

Некоторые библиотеки предоставляют доступ к вещам более низкого уровня, некоторые модули просто позволяют вам выстрелить себе в ногу. Поэтому, естественно, некоторые модули более опасны, чем другие. Это не значит, что вы не должны их использовать!

Вы, наверное, слышали, что кто-то ссылался на что-то вроде этого:

#Crash python interpreter
from ctypes import *
def crashme():
    c = c_char('x')
    p = pointer(c)
    i = 0
    while True:
            p[i] = 'x'
            i += 1

Сбой интерпретатора Python отличается от того, что сам код Python выдает ошибку во время выполнения. Например, бесконечная рекурсия с установленным пределом рекурсии по умолчанию вызовет ошибку времени выполнения, но интерпретатор python после этого все еще будет жив.

Еще один хороший пример этого - модуль sys. Вы не откажетесь от использования модуля sys, потому что это может привести к сбою интерпретатора python.

import sys
sys.setrecursionlimit(2**30)
def f(x):
  f(x+1)

#This will cause no more resources left and then crash the python interpreter
f(1)

Также существует множество библиотек, обеспечивающих доступ более низкого уровня. Например, модулем gc можно управлять, чтобы предоставить доступ к частично сконструированному объекту, доступ к полям которого может вызвать сбои.

Ссылки и идеи взяты из: Crashing Python

5
ответ дан 6 December 2019 в 07:51
поделиться

ctypes действительно могут вызывать сбои, если используемая вами библиотека C может уже вызывать сбои.

Во всяком случае, ctypes ] может помочь уменьшить количество сбоев, потому что вы можете обеспечить безопасность типов во время выполнения с помощью свойства argtypes для функций C, используя ctypes .

Но если ваша библиотека C уже стабильный и протестированный, нет абсолютно никаких причин не использовать ctypes , если он выполняет то, что вам нужно с точки зрения объединения C и Python.

3
ответ дан 6 December 2019 в 07:51
поделиться

Я настоятельно рекомендую вам прочитать эту книгу:

Gray Hat Python: Python Programming for Hackers and Reverse Engineers

Книга функционирует как подробное руководство по библиотеке ctypes , и показывает, как запускать невероятно низкоуровневый код

2
ответ дан 6 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: