Jython 2.5 isdigit

Я пытаюсь добавить isdigit() в программу, чтобы я мог проверить, что вводимые пользователем действительны. Это то, что я до сих пор. Но когда я запускаю его, введите символ, произнесите "f". Вылетает и выдает ошибку, которая будет опубликована под кодом. Есть идеи?

def mirrorHorizontal(source):    
    userMirrorPoint = requestString("Enter a mirror point from 0 to halfway through the pitcure.")      #asks user for an input
    while (int(userMirrorPoint) < 0 or int(userMirrorPoint) > (int(getHeight(source) - 1)//2)) or not(userMirrorPoint.isdigit()):
        userMirrorPoint = requestString("Enter a mirror point from 0 to halfway through the pitcure.") 
    height = getHeight(source)
    mirrorPoint = int(userMirrorPoint)
    for x in range(0, getWidth(source)):
        for y in range(0, mirrorPoint):
            topPixel = getPixel(source, x, y)
            bottomPixel = getPixel(source, x, height-y-1)
            color = getColor(topPixel)
            setColor(bottomPixel, color)

Ошибка: f Неправильное значение аргумента (правильного типа). Произошла ошибка при попытке передать аргумент функции. Пожалуйста, проверьте строку 182 из / Объемы /FLASHDRIVE2/ Колледж / Весна 16'/ Программы - CPS 201/PA5Sikorski.py

1 ответ

Сам isdigit() ведет себя в jython версии 2.7.0, которую я имею локально

>>> '1'.isdigit()
True
>>> ''.isdigit()
False
>>> 'A'.isdigit()
False
>>> 'A2'.isdigit()
False
>>> '2'.isdigit()
True
>>> '22321'.isdigit()
True

Попробуйте разбить ваше большое выражение, поскольку приведение типов к целым числам приведет к ошибкам для нечисловых строк. Это верно для всех версий Python.

>>> int('b')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'b'
>>> int('2')
2

Вы, вероятно, хотите быть осторожным с порядком частей этого длинного выражения (того или иного или...). Breaking it up would also make it more readable.

Другие вопросы по тегам