#python
#питон
Вопрос:
У меня есть следующий код:
import sys def main(option1, option2, option3): # do something if __name__ == '__main__': option1 = bool(sys.argv[1]) option2 = bool(sys.argv[2]) option3 = bool(sys.argv[3])
Однако, когда я запускаю скрипт из командной строки, как:
conda activate myenv python C:mypathmyscript.py 0 0 1
Он не преобразует целые числа в логические и работает так, как если бы все они были истинными (1s). Кто-нибудь знает, как я могу это исправить?
Комментарии:
1. входные данные-это строки (
bool('0')
-gt; gt;True
), вам нужно преобразовать:bool(int(sys.argv[1]))
(Примечание. это простой пример, вам, вероятно, сначала нужно проверить входные данные)
Ответ №1:
В python непустая строка является «правдивой», то есть она оценивается как истинная при использовании в качестве условия. argv
элементы всегда являются строками, поэтому здесь вы получаете «правдивость» 3 непустых строк, которые всегда будут оцениваться как истинные.
Вы должны преобразовать в int перед преобразованием в bool.
if __name__ == '__main__': option1 = bool(int(sys.argv[1])) option2 = bool(int(sys.argv[2])) option3 = bool(int(sys.argv[3]))
Комментарии:
1. Спасибо, это решает проблему.
2. Спасибо @khelwood, я обновил свой ответ, чтобы быть более технически точным.