Ошибка в простом модуле Python

1

Я попытался написать небольшой скрипт python сегодня, но потерпел неудачу ужасно. Почему код ниже дает мне следующую ошибку после вызова из оболочки?

ошибка

File "./testmod.py", line 15, in <module>
    printdnsfile(sys.argv[1])
  File "./testmod.py", line 10, in printdnsfile
    print(socket.gethostbyname(str(line)))
socket.gaierror: [Errno 8] nodename nor servname provided, or not known

Код

#!/usr/bin/python

def printdnsfile(file):
    file= open (file,"r")
    import socket
    dest = open("/dnsfile.txt",'w')
    for line in file:
        print(socket.gethostbyname(str(line)))
        print>>dest, str(",".join([line,socket.gethostbyname(line)])+'\n')

if __name__ == "__main__":
    import sys
    printdnsfile(sys.argv[1]) 

Я тестировал модуль сокета в python-консоли, и он работал, как ожидалось. Есть ли ошибка с моим кодом или это проблема с моей конфигурацией?

Благодарю.

Теги:

2 ответа

2
Лучший ответ

В вашем исходном файле может быть пустая строка. Попробуйте проверить свою линию перед gethostbyname.

def printdnsfile(file):
    file= open (file,"r")
    import socket
    dest = open("/dnsfile.txt",'w')
    for line in file:
        line = line.strip()
        if line:
            print(socket.gethostbyname(str(line)))
            print>>dest, str(",".join([line,socket.gethostbyname(line)])+'\n')
  • 0
    У меня нет пустой строки во входном файле, но моя проблема, тем не менее, была решена с помощью вашего предложения :). Любопытно, почему это так. В любом случае, благодарю Вас!
  • 0
    Не забывайте о последней строке в файле. Иногда это не очень хорошо отображается в вашем текстовом редакторе. Это может быть так.
1

Вероятно, проблема в том, что line не содержит ожидаемого значения. Чтобы убедиться в этом, вы можете добавить оператор print line до строки, которая не работает или использует pdb для отладки программы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню