Найти - Пользователи
Полная версия: Непонятки с открытием файла
Начало » Python для экспертов » Непонятки с открытием файла
1
Murr_vk
Доброго всем времени суток. Учусь программировать на питоне, столкнулся со странной ситуацией.

Насколько я знаю, файлы в питоне открываются функцией open и выглядит это примерно так:

f = open(fname, “r”) # Где fname - строковая константа с именем файла

Вроде все просто и понятно, но в одной из моих программ перестало вдруг работать. Начало выдавать ошибку о несовместимости типов, мол в аргументах функции должен быть Integer. Долго искал в этой нехитрой строчке ошибку, естественно ничего не нашел, поэтому достал с полки бубен и начал прыгать вокруг компютера. В итоге вылечилось заменой строки

from os import *

на

import os

и редактированием соответствующих функций. Собственно говоря вопрос - а чего я делал не так, чем интерпретатору не понравилось from os import *?
guest01
Murr_vk
Собственно говоря вопрос - а чего я делал не так, чем интерпретатору не понравилось from os import *?
Как пишет автор языка в топике “What are the ”best practices“ for using import in a module?”:

In general, don't use from modulename import *. Doing so CLUTTERS the importer's namespace.

Ключевое слово я выделил. Предположу, что таким образом мы вызываем некую иную функцию open (а их в разных простанствах немало). Происходит смещение (помехи) в пространстве имен. Imho, не стоит импортировать модули таким образом.
Андрей Светлов
Именно.
os.open (есть и такая) перекрыла __builtins__.open после
from os import *
а у нее сигнатура
open(filename, flag ) -> fd
Вот и нестыковка
Murr_vk
Ясно, спасибо. Впредь буду руководствоваться советами Ван Россума :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB