2016-02-06 2 views
-1

У меня есть две функции: одна, которая очищает входной текст, и тот, который проверяет, является ли cleantext шестнадцатеричным. При передаче функции очистки строка всех пробелов, она удаляет пробелы, оставляя нулевую строку.Почему проверка пустой строки на string.hexdigits() возвращает допустимый?

То, что я не понимаю, - это то, почему string.hexdigits() не перекрывает эту пустую строку, и пусть это пройдет как действительный hex.

def testHex(ciphertext): 
    cleancipher = cleanHex(ciphertext) 
    if all(h in string.hexdigits for h in cleancipher): 
     print('String is valid hex.') 
    else: 
     print('String is not valid hex.') 

def cleanHex(ciphertext): 
    return(ciphertext.replace(' ', '').replace('0x', '').replace(':', '').replace('\\x', '').strip()) 
+0

'почему string.hexdigits() не barf' - на самом деле это так ...' string.hexdigits' - это строка, вы не можете назвать ее и получить ошибку для попытки. –

+0

Люди жестоки с downvotes на SO, хотя это не в поиске. Заключительный вопрос сейчас. ** Редактировать: ** Не понял, что я не смог удалить с ответом на борту. Думаю, держись. Благодарим сообщество. – cremefraiche

+0

@StefanPochmann Я ожидаю, что это будет не для того, чтобы не быть hexdigit, а не для того, чтобы не быть строкой. Представленный ответ прояснил это для меня. – cremefraiche

ответ

2

testHex выходы String is valid hex. для пустых строк, потому что all возвращает True для пустого итерируемых

Это documented

все (итерация)

Возвращает True, если все элементы Iterable являются true (или если итерабельность пуста).

+0

Спасибо, я был так занят разбором документации string.hexdigits(), я не думал проверять все(). Я соглашусь, когда таймер истечет через 10 минут. – cremefraiche

Смежные вопросы