பைத்தானின் ஆர்க்பார்ஸில் பூலியன் மதிப்புகளைக் கையாளும் போது கவனமாக இருங்கள்

வணிக

பைத்தானில் கட்டளை வரி வாதங்களைக் கையாள, sys தொகுதியின் argv அல்லது argparse தொகுதிகளைப் பயன்படுத்தவும்.

ஆர்க்பார்ஸ் தொகுதி கட்டளை வரி வாதங்களை நெகிழ்வான கையாளுதலை அனுமதிக்கிறது, ஆனால் பூலியன் மதிப்புகளை (உண்மை, தவறு) கையாளும் போது கவனமாக இருக்க வேண்டும்.

பின்வரும் தகவல்கள் இங்கே கொடுக்கப்பட்டுள்ளன.

  • வாதங்களின் எளிதான வரையறைக்கு argparse
  • argparse உடன் வாதத்தின் வகையை (வகை) குறிப்பிடவும்
  • add_argument() இன் வாத வகையாக “bool” ஐக் குறிப்பிட வேண்டாம்
  • பூல் () மூலம் தீர்ப்பு
  • வாத வகைக்குப் பதிலாக வாத நடவடிக்கையைப் பயன்படுத்தவும்.
  • strtobool() செயல்பாட்டைப் பயன்படுத்துதல்

வாதங்களின் எளிதான வரையறைக்கு argparse

argparse தொகுதி கட்டளை வரி வாதங்களை வரையறுப்பதை எளிதாக்குகிறது.

argparse தொகுதி பயனர் நட்பு கட்டளை வரி இடைமுகங்களை உருவாக்குவதை எளிதாக்குகிறது. உங்கள் நிரலுக்கு என்ன வாதங்கள் தேவை என்பதை நீங்கள் வரையறுக்கிறீர்கள், மேலும் sys.argv இலிருந்து அந்த விருப்பங்களை எவ்வாறு அலசுவது என்பதை argparse கண்டுபிடிக்கும். argparse தொகுதி தானாகவே உதவி மற்றும் பயன்பாட்டு செய்திகளை உருவாக்குகிறது, மேலும் பயனர் தவறான வாதங்களை நிரலுக்குக் குறிப்பிட்டால் பிழையை எழுப்புகிறது. நிரலுக்கு பயனர் தவறான வாதங்களைக் குறிப்பிடும்போது பிழை.
argparse — Parser for command-line options, arguments and sub-commands — Python 3.10.0 Documentation

argparse உடன் வாதத்தின் வகையை (வகை) குறிப்பிடவும்

argparse இன் பயனுள்ள அம்சம் வகையை (வகை) குறிப்பிடுவதாகும்.

எடுத்துக்காட்டாக, நீங்கள் ஒரு முழு எண் (int) வகையைக் குறிப்பிட்டால், அது தானாகவே வாதத்தை int ஆக மாற்றும், மேலும் int இல்லாத வாதங்களுக்கான பிழையை எழுப்பும்.

add_argument() இன் வாத வகையால் வகை குறிப்பிடப்படுகிறது.

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('arg_int', type=int)

args = parser.parse_args()
print(args.arg_int)
print(type(args.arg_int))

கட்டளை வரியிலிருந்து இந்த கோப்பை இயக்கவும்.

$ python argparse_type_int.py 100
100
<type 'int'>

வாதம் 100 எண்ணாக வாசிக்கப்படுகிறது.

ஒரு எண்ணற்ற மதிப்பை வாதமாகப் பயன்படுத்தினால், பிழை ஏற்படும்.

$ python argparse_type_int.py foo
usage: argparse_type_int.py [-h] arg_int
argparse_type_int.py: error: argument arg_int: invalid int value: 'foo'

$ python argparse_type_int.py 1.23
usage: argparse_type_int.py [-h] arg_int
argparse_type_int.py: error: argument arg_int: invalid int value: '1.23'

எதிர்பாராத வாதங்களை விளையாடுவதற்கு மிகவும் பயனுள்ளதாக இருக்கும்.

add_argument() இன் வாத வகையாக “bool” ஐக் குறிப்பிட வேண்டாம்

நீங்கள் bool ஐ add_argument() இன் வாத வகையாகக் குறிப்பிட்டால், int மற்றும் float போன்ற bool எதிர்பார்த்தபடி இயங்காது என்பதைக் கவனத்தில் கொள்ள வேண்டும்.

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('arg_bool', type=bool)

args = parser.parse_args()
print(args.arg_bool)
print(type(args.arg_bool))

கட்டளை வரியிலிருந்து இந்த கோப்பை இயக்கவும்.

$ python argparse_type_bool.py True
True
<type 'bool'>

உண்மை என்பது வாதமாகப் பயன்படுத்தப்பட்டால், அது பூல் வகை உண்மையாகப் படிக்கப்படும். இது எதிர்பார்க்கப்படும் நடத்தை, ஆனால் சிக்கல் பின்வரும் வழக்கு.

$ python argparse_type_bool.py False
True
<type 'bool'>

$ python argparse_type_bool.py bar
True
<type 'bool'>

நீங்கள் தவறான அல்லது வேறு ஏதேனும் சரத்தை வாதமாகப் பயன்படுத்தினால், அது உண்மையாகப் படிக்கப்படும்.

இது நிகழும் காரணம் add_argument() இல் type=xxx என குறிப்பிடப்படும் போது, ​​வாதம் xxx() க்கு அனுப்பப்படும்.

எடுத்துக்காட்டாக, type=int எனில், வாதம் int() க்கு அனுப்பப்படும்; type=float எனில், float().

இது வகை=பூலுக்கும் பொருந்தும், அதாவது வாதம் bool() க்கு அனுப்பப்படும்.

பூல் () மூலம் தீர்ப்பு

இந்த பூல்() ஒரு தந்திரமான ஒன்றாகும்.

பின்வரும் மதிப்புகள் தவறானதாகக் கருதப்படுகின்றன:

  • None
  • false
  • எண் வகைகளில் பூஜ்யம். எடுத்துக்காட்டாக, பின்வரும் மதிப்புகள்
    • 0
    • 0
    • 0j
  • ஒரு வெற்று வரிசை. உதாரணத்திற்கு
    • ()
    • []
  • வெற்று மேப்பிங். உதாரணத்திற்கு
    • {}

மற்ற எல்லா மதிப்புகளும் உண்மை என்று கருதப்படுகிறது – இதனால் பல வகையான பொருள்கள் எப்போதும் உண்மையாக இருக்கும். பூலியன் முடிவுகளை வழங்கும் செயல்பாடுகள் மற்றும் உள்ளமைக்கப்பட்ட செயல்பாடுகள் எப்போதும் 0 அல்லது தவறு என்பதை தவறான மதிப்பாகவும், 1 அல்லது True என்பதை உண்மை மதிப்பாகவும் வழங்கும்.

எனவே, bool() க்கு அனுப்பப்பட்ட அனைத்து காலியாக இல்லாத சரங்களும் ‘உண்மை’ அல்லது ‘தவறு’, உண்மை என்று திரும்பும். வெற்று சரங்கள் மட்டுமே தவறானதாக இருக்கும்.

print(bool('True'))
print(bool('False'))
print(bool('abc'))
# True
# True
# True

print(bool(''))
# False

add_argument() இல் type=bool அமைக்கப்படும் போது, ​​வாதம் bool() க்கு அனுப்பப்படும். எனவே, மேலே உள்ள எடுத்துக்காட்டில் காட்டப்பட்டுள்ளபடி, தவறானவை வாதமாகப் பயன்படுத்தினால், அது bool() மூலம் ‘False’ என்ற சரமாக மாற்றப்பட்டு உண்மையாகப் படிக்கப்படும்.

வாத வகைக்குப் பதிலாக வாத நடவடிக்கையைப் பயன்படுத்தவும்.

argparse இல் பூலியன் மதிப்புகளைப் பயன்படுத்த விரும்பினால், வாத நடவடிக்கைக்கு ‘store_true’ அல்லது ‘store_false’ என்பதைக் குறிப்பிடவும்.

  • store_true’
  • store_false’

இவை ‘store_const’ இன் சிறப்புப் பதிப்புகளாக இருக்கும், அவை முறையே True மற்றும் Falseஐச் சேமிக்கும். கூடுதலாக, அவர்கள் அந்த வரிசையில் இயல்புநிலை மதிப்புகளை முறையே தவறு மற்றும் உண்மை என அமைப்பார்கள்.
argparse — Parser for command-line options, arguments and sub-commands — Python 3.10.0 Documentation

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--en', action='store_true')

args = parser.parse_args()
print(args.en)
print(type(args.en))

இந்த எடுத்துக்காட்டில், பின்வரும் விருப்பங்கள் கொடுக்கப்பட்டுள்ளன.
--enஎனவே, en உண்மையாக அமைக்கப்படவில்லை என்றால், அது பொய்யாக ஏற்றப்படும், இது en இன் இயல்புநிலை மதிப்பாகும்.

$ python argparse_option_bool.py --en
True
<type 'bool'>

$ python argparse_option_bool.py
False
<type 'bool'>

நீங்கள் இயல்புநிலையை true எனவும், விருப்பத்தை சேர்க்கும்போது தவறு எனவும் அமைக்க விரும்பினால், பின்வருவனவற்றைச் செய்யுங்கள்.
action='store_false'

strtobool() செயல்பாட்டைப் பயன்படுத்துதல்

நீங்கள் விருப்பங்களுக்கு பதிலாக நிலை வாதங்களைப் பயன்படுத்த விரும்பினால், நீங்கள் strtobool() செயல்பாட்டையும் பயன்படுத்தலாம்.

strtobool() என்பது ஒரு சரத்தை true (1) அல்லது false (0) ஆக மாற்றும் ஒரு செயல்பாடாகும்.

பூலியன் சரத்தை true (1) அல்லது false (0) ஆக மாற்றுகிறது.
உண்மையான மதிப்புகள் பின்வருமாறு

  • y
  • yes
  • true
  • on
  • 1

தவறான மதிப்புகள் பின்வருமாறு.

  • n
  • no
  • f
  • false
  • off
  • 0

val என்பது மேலே உள்ளவற்றில் எதுவுமில்லை என்றால், அது ValueError ஐ எழுப்புகிறது.

9. API Reference – strtobool() — Python 3.10.0 Documentation

இது கேஸ் சென்சிட்டிவ் அல்ல, எனவே எடுத்துக்காட்டாக, நீங்கள் பின்வருவனவற்றைப் பயன்படுத்தலாம்; வேறு எந்த சரமும் பிழையை ஏற்படுத்தும்.

  • TRUE'
  • True'
  • YES'
from distutils.util import strtobool

print(strtobool('true'))
print(strtobool('True'))
print(strtobool('TRUE'))
# 1
# 1
# 1

print(strtobool('t'))
print(strtobool('yes'))
print(strtobool('y'))
print(strtobool('on'))
print(strtobool('1'))
# 1
# 1
# 1
# 1
# 1

print(strtobool('false'))
print(strtobool('False'))
print(strtobool('FALSE'))
# 0
# 0
# 0

print(strtobool('f'))
print(strtobool('no'))
print(strtobool('n'))
print(strtobool('off'))
print(strtobool('0'))
# 0
# 0
# 0
# 0
# 0

# print(strtobool('abc'))
# ValueError: invalid truth value 'abc'

பெயர் strtobool(), ஆனால் திரும்ப மதிப்பு bool அல்ல, ஆனால் int (1 அல்லது 0).

print(type(strtobool('true')))
# <class 'int'>

முன்பு எழுதியது போல், argparse இன் add_argument() இல் type=xxx குறிப்பிடப்பட்டால், வாதம் xxx() க்கு அனுப்பப்படும். எனவே, நாம் பின்வருவனவற்றைச் செய்யலாம்.
type=strtobool

import argparse
from distutils.util import strtobool

parser = argparse.ArgumentParser()
parser.add_argument('arg_bool', type=strtobool)

args = parser.parse_args()
print(args.arg_bool)
print(type(args.arg_bool))

திரும்பும் மதிப்பு பூல் வகை அல்ல, ஆனால் ஒரு முழு எண்ணாக வகை 1 அல்லது 0, ஆனால் அது சரி அல்லது தவறான மதிப்புகளை வாதங்களாக சரி அல்லது பொய்யுடன் படிக்கலாம்.

$ python argparse_type_strtobool.py true
1
<type 'int'>

$ python argparse_type_strtobool.py false
0
<type 'int'>

மேலும், வாதம் எதிர்பார்க்கப்படாவிட்டால், பிழை சரியாக உருவாக்கப்படும்.

$ python argparse_type_strtobool.py bar
usage: argparse_type_strtobool.py [-h] arg_bool
argparse_type_strtobool.py: error: argument arg_bool: invalid strtobool value: 'bar'