2015-06-22 10 views
10

Piszę funkcję, która pobiera obiekt pliku, np.W języku Python, w jaki sposób potwierdzić, że obiekt pliku przekazanego został otwarty za pomocą newline = ''?

def my_fn(file_obj): 
    assert <what expression here?>, "file_obj must be opened with newline=''." 
    ... 

Pierwszą rzeczą, którą chcesz zrobić w funkcji jest zapewnienie, że przekazywane w obiekcie plik został otwarty z newline=''. Jak mam to zrobic? Dzięki.

PS. Uważam, że to pytanie dotyczy tylko Pythona 3, ponieważ newline='' istnieje tylko w Pythonie 3 (zauważ, że różni się od domyślnego newline=None).

+0

Być może warto złożyć zgłoszenie błędu, wydaje się to sensownym przypadkiem użycia. –

Odpowiedz

1

Bez analizowania źródła w czasie wykonywania za pomocą ast Nie sądzę, że będzie to łatwe lub możliwe, aby uzyskać informacje z obiektu pliku, możesz być może upewnić się, że nowa linia to None lub "" czytając linia następnie sprawdzanie atrybut nowe linie, ale nie jestem pewien, że atrybut newlines jest nawet zawsze będzie dostępny:

next(f) 
    if f.newlines is None: 
     raise ValueError("...") 
    else: 
     f.seek(0) 

ale jeśli można przyjąć tylko obiekt pliku z funkcji, która pobiera nazwę pliku i otwórz plik siebie, aby mieć kontrolę:

def open_fle(f, mode="r"): 
    with open(f, mode=mode, newline="") as f: 
     ..... 
+0

W rzeczywistości atrybut 'newlines' nie zawsze jest dostępny (jest dostępny tylko w plikach otwartych w trybie tekstowym). –

+0

@SimeonVisser, tak byłem prawie pewien, że zależało to od implementacji, nie widzę żadnej drogi poza możliwością analizowania źródła w środowisku wykonawczym, aby wymusić użycie 'newline =" " –

Powiązane problemy