Найти - Пользователи
Полная версия: object has no attribute 'RunSleep111' за что так ругает?
Начало » Python для новичков » object has no attribute 'RunSleep111' за что так ругает?
1 2
GDK
module1.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import AlClk


def go():
print 'go'

a=AlClk.AlClkCls(14,9,2009,14,30,0,go)

x = a.RunSleep111(2) ##Error
File “G:\MainJob\module1.py”, line 48, in <module>
x = a.RunSleep111(2)
AttributeError: ‘AlClkCls’ object has no attribute ‘RunSleep111’
типа объект не имеет такого аттрибута, но ведь он есть то есть она



AlClk.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import threading
import datetime
import time


class AlClkCls(threading.Thread):
def __init__(self, dd, mm, yyyy, h, m, s, UserDef):
threading.Thread.__init__(self)

def AlarmClock(self):
print 'AlarmClock'
UserDef

def RunSleep111(self,g): ## вот же она, БЛИН!!!!!!!
time.sleep (2.0)
print 'lll'
return 0
timas
В таком виде все будет работать.

File “G:\MainJob\module1.py”, line 48
Попробуй полностью привести код, может там что-то такое есть…
GDK
Да нет это весь код - больше ничего нет ни в том ни в другом модулях. Я ж эти модули просто для проверки создавал.
balu
Все работает. Ты оба файла в одном каталоге держишь?
GDK
В одном. Блин ща попробую в консоли запустить.

Запустил. Консоль сказала
Import Error про AlClk.

Попробовал запустить в портабельном PyScripter всё работает. Похоже глючил PyScripter который у меня непортабельный. Теперь буду перепроверять его сообщения в консоли. Но почему же Import Error? А можно писать полный путь к импортируемому файлу? Как правильно? Нигде такого примера не видел.
balu
GDK
А можно писать полный путь к импортируемому файлу? Как правильно?
Нет, не надо. Скорее всего у тебя смешение символов. Переименуй сначала файл, причем рекомендую это сделать маленькими латинскими буквами, например bdr.py , так не ошибешся.
GDK
Ну всё. Задолбало просто. Решил не просто переименовать файл, а скопировать на диск C:
Вот что получилось:
C:\nnn в ней два модуля module1.py, aaa.py
буквы точно латинские. Ну да ладно код в module.py изменил
import threading
import datetime

import string

##import aaa


##a=aaa.AlClkCls(14,9,2009,14,30,0,go)
##
##x = a.RunSleep111(2)

print "gggg"
запустил саму питон-консоль и execfile('C:\nnn\module1.py')

получил в консоли IOError No such file or directory: ‘C:\nnn\\module1.py’

запустил PyScripter, открыл в нём этот module1.py, проверил что открыт именно он - в синей полоске окна отображается путь к файлу запустил - всё ОК. Короче всё, сил нет. Это видать глюки какие то. Теперь сам буду пытать эту гадину пока не офигеет. Спасибо за ответы.


блин. запустил саму питон-консоль и execfile('C:/nnn/module1.py') просто от безысходности - так работает,
раскомментировал, запустил ещё разок ->>> ImportError: No module named aaa
В PyScripter всё работает. Может косяк из за того что версия питона портабельная? Пойду на обычной версии пробовать. Спасибо ещё раз за ответ. Ну интерпретатор со слэшами ооооочень удивил конечно.
igor.kaist
GDK
execfile('C:\nnn\module1.py')
Не забывай, что \n это символ перевода строки…. Используй прямые слеши…
Насчет портабельного питона, проблема скорее всего не в нем (только что проверял).
Когда ты делаешь execfile, твой каталог c:/nnn не является рабочим, и соответственно твои модули интерпретатору не видны.
GDK
GDK
AttributeError: ‘AlClkCls’ object has no attribute ‘RunSleep111’
С этим вроде прояснилось. Короче начал делать модуль .py и там несколько классов. Не работали 4 из 5-ти процедур в одном из классов с выдачей такого сообщения. А я этот модуль начал делать в PyScripter. В нем неудобно что нельзя как бы скрыть код тела процедуры, определения класса и т.п., поэтому я не закрыв его в PyScripter открыл его в NotePad++ и некоторые изменения вносил там. В результате в PyScripter отступы оказались знаками табуляции или ещё непонятно чем. PyScripter это не расценил как синтаксическую ошибку и просто видать игнорировал эти несколько процедур. Короче в PyScriptere переписал все отступы этих методов как пробелы ну и всё заработало как положено.
Про слэши понятно теперь. Хоть я и знал что значит \n, но даже на ум не пришло что execfile его тоже обрабатывает как перенос.
igor.kaist
Когда ты делаешь execfile, твой каталог c:/nnn не является рабочим, и соответственно твои модули интерпретатору не видны.
Это как я понял про ошибки импорта. Как же тогда будет правильно?
igor.kaist
GDK
Хоть я и знал что значит \n, но даже на ум не пришло что execfile его тоже обрабатывает как перенос.
Он обрабатывается везде как перенос, если только ты не сделаешь r'some\nstring'
GDK
Это как я понял про ошибки импорта. Как же тогда будет правильно?
Это не является ошибкой импорта. Пойми, когда ты делаешь execfile, то каталог не оказывается в sys.path, и твои модули не будут видны питону. Сделай сначала sys.path.append(YOUR_DIR), а потом exicfile
P.S. У комплетке с портабельным питоном идет нормальная запускалка скриптов, почему бы не использовать ее?!
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