Форум сайта python.su
запускаю ошибка
File “Main.py”, line 123, in <module>
key = Key.from_int(random.randint(a,b))
File “C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\random.py”, line 221, in randint
return self.randrange(a, b+1)
TypeError: must be str, not int
Для продолжения нажмите любую клавишу . . .
Ругается на строчку в коде,123 строка
key = Key.from_int(random.randint(a,b))
Офлайн
shshgyva1123sдолжен быть str, а не int
TypeError: must be str, not int
a = "10000" b = "99999"
a1 = open(“1.txt”, “r”).read()
b1 = open(“2.txt”, “r”).read()
a = a1
b = b1
Отредактировано m1r42 (Ноя. 7, 2022 07:56:38)
Офлайн
shshgyva1123sвсе что читается из файла - это строка.
добавил в код
#a1 = open(“1.txt”, “r”).read()
#b1 = open(“2.txt”, “r”).read()
чтобы значение бралось из txt файла и изменил
a = a1
b = b1
и после этого появилась ошибка на 123 строке.
import random with (open('1.txt', 'r') as f1, open('2.txt', 'r') as f2): a = int(f1.read()) b = int(f2.read()) rand_num = random.randint(a, b) print(rand_num)
[code python]между этими тегами вставлять код[/code]
Офлайн
shshgyva1123sЭто баг питонаFile "C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\random.py", line 221, in randint return self.randrange(a, b+1) TypeError: must be str, not int
>>> import random >>> >>> random.randint('1', '2') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib64/python3.6/random.py", line 221, in randint return self.randrange(a, b+1) TypeError: must be str, not int >>> >>> random.randint(1, 2) 2 >>>
TypeError: must be int, not str
Отредактировано py.user.next (Ноя. 7, 2022 20:57:18)
Офлайн
Он должен писатьТак он и пишет
Отредактировано ZerG (Ноя. 8, 2022 11:16:09)
Офлайн
ZerGPython 3.10.0a0
Так он и пишет
>>> import random >>> >>> random.randint('1', '2') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/mnt/.../cpython/Lib/random.py", line 338, in randint return self.randrange(a, b+1) TypeError: can only concatenate str (not "int") to str >>>
ZerGОшибка в библиотечном модуле random.
Просто нужно редактор использовать нормальный
Отредактировано py.user.next (Ноя. 8, 2022 14:10:36)
Офлайн
py.user.nextЯ думаю, что перед запуском randrange выполняется операция сложения b+1, а так как b это строка в конкретно этом случае то правильно и пишет, можно конкатенировать только строку (не число)
TypeError: can only concatenate str (not “int”) to str
def randint(self, a, b): """Return random integer in range [a, b], including both end points. """ return self.randrange(a, b+1)
>>> '1'+1 Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> '1'+1 TypeError: can only concatenate str (not "int") to str >>>
def randint(self, a, b): """Return random integer in range [a, b], including both end points. """ return self.randrange(int(a), int(b)+1)
>>> import random >>> random.randint('1','2') 2 >>>
Отредактировано m1r42 (Ноя. 8, 2022 15:27:09)
Офлайн
>>> import random >>> random.randint('1.0','2.0') >>> ?
Офлайн
ZerGСмешно . Я написал, что ради шутки.
>>> import random
>>> random.randint('1.0','2.0')
>>> ?
>>> int('1.0') Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> int('1.0') ValueError: invalid literal for int() with base 10: '1.0' >>>
try: int('1.0') a = 1 except Exception as e: print(e) a = 0 if a == 0: try: b = float('1.0') print(b) except Exception as e: print(e) elif a == 1: print(a)
Отредактировано m1r42 (Ноя. 8, 2022 16:24:15)
Офлайн
m1r42Это всё, конечно, интересно, но там весь модуль random надо пересматривать, потому что это не единственный подобный баг в нём. Когда он писался, то время прошло уже давно, а ошибки старые остались, которые для современного питона смотрятся как-то сопливо.
и, о чудо теперь можно не заморачиваться с типами str и int
Офлайн