Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 6, 2022 23:35:40

shshgyva1123s
Зарегистрирован: 2022-02-14
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите исправить ошибку TypeError: must be str, not int

запускаю ошибка

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))

В скрипте были переменные вот так и все работало
a = 10000
b = 99999

добавил в код
#a1 = open(“1.txt”, “r”).read()
#b1 = open(“2.txt”, “r”).read()

чтобы значение бралось из txt файла и изменил
a = a1
b = b1

и после этого появилась ошибка на 123 строке.

Возможно исправить это? и как? сильно не пинайте пожалуйста






Офлайн

#2 Ноя. 7, 2022 07:48:41

m1r42
Зарегистрирован: 2022-07-26
Сообщения: 133
Репутация: +  7  -
Профиль   Отправить e-mail  

Помогите исправить ошибку TypeError: must be str, not int

shshgyva1123s
TypeError: must be str, not int
должен быть str, а не int

т.е. переменные a и b должны быть строками с самого начала
 a = "10000"
b = "99999"

Это если в дальнейшем им присваивать строковое значение.

затем при расчетах можно сделать их int(a) + int(b) если надо, но это бредово. Надо изначально логику по другому построить.

randint(a,b) же сама за себя говорит, что ей надо int
а вы ей суете сроки
a1 = open(“1.txt”, “r”).read()
b1 = open(“2.txt”, “r”).read()
a = a1
b = b1

Отредактировано m1r42 (Ноя. 7, 2022 07:56:38)

Офлайн

#3 Ноя. 7, 2022 09:23:06

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1359
Репутация: +  119  -
Профиль   Отправить e-mail  

Помогите исправить ошибку TypeError: must be str, not int

shshgyva1123s
добавил в код
#a1 = open(“1.txt”, “r”).read()
#b1 = open(“2.txt”, “r”).read()

чтобы значение бралось из txt файла и изменил
a = a1
b = b1

и после этого появилась ошибка на 123 строке.
все что читается из файла - это строка.
randint принимает на вход значение типа int

  
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]

Офлайн

#4 Ноя. 7, 2022 20:53:42

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Помогите исправить ошибку TypeError: must be str, not int

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
Можно запостить этот баг https://github.com/python/cpython/issues , чтобы его исправили.

Ты в random.randint() передал не целые числа, а строки. Из файла целые числа в текстовом режиме не читаются, поэтому после прочтения “чисел” из файла нужно перевести их в целочисленный тип.



Отредактировано py.user.next (Ноя. 7, 2022 20:57:18)

Офлайн

#5 Ноя. 8, 2022 11:15:39

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Помогите исправить ошибку TypeError: must be str, not int

Он должен писать
Так он и пишет
Да и описание тоже самое говорит
Просто нужно редактор использовать нормальный



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Отредактировано ZerG (Ноя. 8, 2022 11:16:09)

Офлайн

#6 Ноя. 8, 2022 14:10:25

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Помогите исправить ошибку TypeError: must be str, not int

ZerG
Так он и пишет
Python 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)

Офлайн

#7 Ноя. 8, 2022 14:29:24

m1r42
Зарегистрирован: 2022-07-26
Сообщения: 133
Репутация: +  7  -
Профиль   Отправить e-mail  

Помогите исправить ошибку TypeError: must be str, not int

py.user.next
TypeError: can only concatenate str (not “int”) to str
Я думаю, что перед запуском randrange выполняется операция сложения b+1, а так как b это строка в конкретно этом случае то правильно и пишет, можно конкатенировать только строку (не число)
Вот этот кусок модуля random.py
    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
>>> 
randint же не предполагает что ему подсунут строку
Только для эксперимента исправил модуль random для ленивых
     def randint(self, a, b):
        """Return random integer in range [a, b], including both end points.
        """
        return self.randrange(int(a), int(b)+1)
и, о чудо теперь можно не заморачиваться с типами str и int
 >>> import random
>>> random.randint('1','2')
2
>>> 
, но это только ради шутки

Отредактировано m1r42 (Ноя. 8, 2022 15:27:09)

Офлайн

#8 Ноя. 8, 2022 15:54:03

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Помогите исправить ошибку TypeError: must be str, not int

  >>> import random
>>> random.randint('1.0','2.0')
>>> ?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#9 Ноя. 8, 2022 15:58:34

m1r42
Зарегистрирован: 2022-07-26
Сообщения: 133
Репутация: +  7  -
Профиль   Отправить e-mail  

Помогите исправить ошибку TypeError: must be str, not int

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'
>>> 
При желании можно добавить и float('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)

Офлайн

#10 Ноя. 8, 2022 21:41:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Помогите исправить ошибку TypeError: must be str, not int

m1r42
и, о чудо теперь можно не заморачиваться с типами str и int
Это всё, конечно, интересно, но там весь модуль random надо пересматривать, потому что это не единственный подобный баг в нём. Когда он писался, то время прошло уже давно, а ошибки старые остались, которые для современного питона смотрятся как-то сопливо.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version