Что означает травление и разбрасывание? [Дубликат]

Другим сценарием является то, что вы нанесли нулевой объект в тип значения . Например, код ниже:

object o = null;
DateTime d = (DateTime)o;

Он выкинет NullReferenceException в роли. В приведенном выше примере это кажется совершенно очевидным, но это может произойти в более «поздних связующих» сложных сценариях, где нулевой объект был возвращен из некоторого кода, которого вы не являетесь, и приведение, например, генерируется некоторой автоматической системой.

Одним из примеров этого является этот простой фрагмент привязки ASP.NET с элементом управления календарем:

" />

Здесь SelectedDate на самом деле является свойством - типа DateTime - типа Calendar Web Control, и привязка может отлично вернуть что-то null. Неявный генератор ASP.NET создаст кусок кода, который будет эквивалентен приведенному выше методу. И это поднимет NullReferenceException, что довольно сложно определить, потому что он лежит в сгенерированном ASP.NET коде, который компилирует отлично ...

47
задан zubinmehta 5 November 2010 в 04:42
поделиться

1 ответ

pickle предназначен для сериализации некоторого объекта (или объектов) как одного байтового потока в файле.

shelve строит поверх pickle и реализует словарь сериализации, где объекты маринуются, но связан с ключом (некоторая строка), поэтому вы можете загрузить файл с отложенными данными и получить доступ к маринованным объектам с помощью ключей. Это было бы более удобно, если бы вы сериализовали множество объектов.

Вот пример использования между ними. (должен работать в последних версиях Python 2.7 и Python 3.x).

pickle Пример

import pickle

integers = [1, 2, 3, 4, 5]

with open('pickle-example.p', 'wb') as pfile:
    pickle.dump(integers, pfile)

Это выведет список integers в двоичный файл, называемый pickle-example.p.

Теперь попробуйте прочитать маринованный файл назад.

import pickle

with open('pickle-example.p', 'rb') as pfile:
    integers = pickle.load(pfile)
    print integers

Вышеуказанное должно выводить [1, 2, 3, 4, 5].

shelve Пример

import shelve

integers = [1, 2, 3, 4, 5]

# If you're using Python 2.7, import contextlib and use
# the line:
# with contextlib.closing(shelve.open('shelf-example', 'c')) as shelf:
with shelve.open('shelf-example', 'c') as shelf:
    shelf['ints'] = integers

Обратите внимание, как вы добавляете объекты на полку через доступ к словарю.

Прочтите объект обратно с помощью кода, подобного следующему:

import shelve

# If you're using Python 2.7, import contextlib and use
# the line:
# with contextlib.closing(shelve.open('shelf-example', 'r')) as shelf:
with shelve.open('shelf-example', 'r') as shelf:
    for key in shelf.keys():
        print(repr(key), repr(shelf[key])))

Выход будет 'ints', [1, 2, 3, 4, 5].

66
ответ дан wkl 3 September 2018 в 13:25
поделиться
Другие вопросы по тегам:

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