2015-10-19 18 views
0

Я нахожусь на ранней стадии обучения python и следуя различным онлайн-обучающим видео.Ошибка Python 3.4 - TypeError: объект «NoneType» не является вызываемым

Я запускаю Python 3.4.x x64, используя PyCharms в Windows.

В этом конкретном примере, чтобы узнать, как использовать pysftp, сценарий примера должен сначала загрузить файл на сервер, а затем вторая часть - загрузить файл с сервера.

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

Ниже приведен сценарий, и ниже, являются ошибки, которые я видел, когда работает в режиме отладки с помощью отладчика:

import pysftp as sftp 
#import pdb 

def push_file_to_server(): 
    s = sftp.Connection(host='192.168.2.36', 
         username ='root', 
         password='xxxxxxx') 

    local_path = "testme.txt" 
    remote_path = "/home/testme.txt" 
    s.put(local_path, remote_path) 
    s.close() 

#push_file_to_server() 


#pdb.set_trace() 

def get_file_from_server(): 
    s = sftp.Connection(host='192.168.2.36', 
         username ='root', 
         password='xxxxxxx') 

    local_path = "testme.txt" 
    remote_path = "/home/testme.txt" 

    s.get(remote_path, local_path) 
    s.close() 

    get_file_from_server() 

При запуске сценария с помощью отладки, это где в выводе отладки я вижу ошибка:

... ...

> c:\python34\lib\logging\__init__.py(1877)shutdown() 
-> h.flush() 
(Pdb) n 
> c:\python34\lib\logging\__init__.py(1878)shutdown() 
-> h.close() 
(Pdb) n 
> c:\python34\lib\logging\__init__.py(1886)shutdown() 
-> h.release() 
(Pdb) n 
> c:\python34\lib\logging\__init__.py(1869)shutdown() 
-> for wr in reversed(handlerList[:]): 
(Pdb) n 
--Return-- 
> c:\python34\lib\logging\__init__.py(1869)shutdown()->None 
-> for wr in reversed(handlerList[:]): 
(Pdb) n 
--Call-- 
Exception ignored in: <function WeakSet.__init__.<locals>._remove at 0x0000000003154158> 
Traceback (most recent call last): 
    File "C:\Python34\lib\_weakrefset.py", line 38, in _remove 
    File "C:\Python34\lib\bdb.py", line 50, in trace_dispatch 
    File "C:\Python34\lib\bdb.py", line 82, in dispatch_call 
    File "C:\Python34\lib\pdb.py", line 249, in user_call 
    File "C:\Python34\lib\pdb.py", line 345, in interaction 
    File "C:\Python34\lib\pdb.py", line 1447, in print_stack_entry 
    File "C:\Python34\lib\bdb.py", line 391, in format_stack_entry 
    File "<frozen importlib._bootstrap>", line 2236, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 265, in __enter__ 
TypeError: 'NoneType' object is not callable 

Я посмотрел ошибку немного, с моим ограниченным знанием это звучит, как это жалоба, когда argume nts отсутствуют в функции, но я не знаю, что делать по-другому, и первая часть скрипта отлично работает при тестировании (uploading), и это то же самое, что и эта часть, просто перевернутая и использующая get вместо put.

Заранее благодарим за любые указания.

+0

При запуске это нормально, в чем отслеживающий выглядеть? – nneonneo

+1

Вы намерены вызвать get_file_from_server() из самого себя? Это то, что делает ваш текущий отступ. – BlivetWidget

+0

Глядя на сообщение об ошибке, он говорит вам, что вы пытаетесь вызвать «Нет», как если бы это была функция. Единственный вызов функции в этой строке - 'reverse()'. Следовательно, значение «обратного» должно быть изменено с нормальной встроенной функции на «Нет». Ясно, что это происходит в другом месте вашего кода. Ищите его. – kindall

ответ

1

Питон пробелы разделителями, так что если вы не работаете на рекурсивной функции, изменить

def get_file_from_server(): 
    s = sftp.Connection(host='192.168.2.36', 
         username ='root', 
         password='xxxxxxx') 

    local_path = "testme.txt" 
    remote_path = "/home/testme.txt" 

    s.get(remote_path, local_path) 
    s.close() 

    get_file_from_server() 

в

def get_file_from_server(): 
    s = sftp.Connection(host='192.168.2.36', 
         username ='root', 
         password='xxxxxxx') 

    local_path = "testme.txt" 
    remote_path = "/home/testme.txt" 

    s.get(remote_path, local_path) 
    s.close() 

get_file_from_server() 
Смежные вопросы