“Неправильный аргумент типа: commandp” ошибка при привязке лямбды с ключом

модуль IPy (модуль, разработанный для контакта с IP-адресами), выдаст исключение ValueError для недопустимых адресов.

>>> from IPy import IP
>>> IP('127.0.0.1')
IP('127.0.0.1')
>>> IP('277.0.0.1')
Traceback (most recent call last):
 ...
ValueError: '277.0.0.1': single byte must be 0 <= byte < 256
>>> IP('foobar')
Traceback (most recent call last):
 ...
ValueError: invalid literal for long() with base 10: 'foobar'

Однако как ответ Dustin, это примет вещи как "4" и "192.168" с тех пор, как упомянуто, это допустимые представления IP-адресов.

при использовании Python 3.3 или позже он теперь включает ipaddress модуль :

>>> import ipaddress
>>> ipaddress.ip_address('127.0.0.1')
IPv4Address('127.0.0.1')
>>> ipaddress.ip_address('277.0.0.1')
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib/python3.3/ipaddress.py", line 54, in ip_address
    address)
ValueError: '277.0.0.1' does not appear to be an IPv4 or IPv6 address
>>> ipaddress.ip_address('foobar')
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib/python3.3/ipaddress.py", line 54, in ip_address
    address)
ValueError: 'foobar' does not appear to be an IPv4 or IPv6 address

Для Python 2, можно получить ту же функциональность с помощью ipaddress при установке python-ipaddress:

pip install ipaddress

Этот модуль совместим с Python 2 и предоставляет очень похожий API тому из ipaddress модуля, включенного в Библиотеку Стандарта Python начиная с Python 3.3. Больше деталей здесь . В Python 2 необходимо будет явно преобразовать строку IP-адреса в unicode: ipaddress.ip_address(u'127.0.0.1').

78
задан Stefan 2 April 2013 в 12:51
поделиться

2 ответа

global-set-key ожидает интерактивную команду. (lambda () (interactive) (forward-line 5)) должно работать.

Кстати, Ch f commandp - довольно хорошая отправная точка для подобных ошибок .

118
ответ дан 24 November 2019 в 10:34
поделиться

Правильная форма должна быть такой -

(global-set-key (kbd "M-n") (lambda () (interactive) (forward-line 5)))

Проблема заключалась в том, что вы забыли указать (интерактивный) (как упомянул Брендан).

Кстати, вы заметите, что я использовал функцию (kbd) для определения привязки клавиш. Эта функция чрезвычайно полезна, так как привязки клавиш можно использовать практически буквально.

34
ответ дан 24 November 2019 в 10:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: